首页 > 其他分享 >( ) 在手,谁敢卡我哈希?

( ) 在手,谁敢卡我哈希?

时间:2022-11-10 21:12:38浏览次数:35  
标签:Hash val int rd 在手 read 哈希 const

#include <bits/stdc++.h>
#define ff fflush(stdout)
#define fop(i, l, r) for (int i = l; i <= r; ++i)
#define pof(i, r, l) for (int i = r; i >= l; --i)
#define edg(i, u) for (int i = head[u], v = to[i]; i; i = nxt[i], v = to[i])
typedef long long ll;
typedef unsigned long long ull;
#define int ll
const int inf = 0x3f3f3f3f3f3f3f3fll;
using namespace std;

int read() {
    int x = 0; bool f = 0; char c;
    while (!isdigit(c = getchar())) if (c == '-') f = 1;
    do x = (x << 1) + (x << 3) + (c ^ 48); while (isdigit(c = getchar()));
    return f ? -x : x;
}

const int maxn = 5e5 + 3;

mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
uniform_int_distribution<ull> rd(1, 1e7);
int rd_k = rd(rnd), rd_b = rd(rnd);

struct Hash {
	ull a, b, c, d;
	Hash() = default;
	void init() { a = b = c = d = 0; }
	Hash(ull x) {
		a = x * x * x - (x & 73) + (x ^ 19260817);
		b = (~x) * x + x * 19491001;
		c = rd_k * x + (rd_b ^ x);
		d = rd_k * rd_k * x + rd_b * x;
	}
	friend Hash operator +(const Hash &a, const Hash &b) {
		Hash c; return c.a = a.a + b.a, c.b = a.b + b.b, c.c = a.c + b.c, c.d = a.d + b.d, c;
	}
	void operator +=(const Hash &a) { *this = *this + a; }
	friend Hash operator -(const Hash &a, const Hash &b) {
		Hash c; return c.a = a.a - b.a, c.b = a.b - b.b, c.c = a.c - b.c, c.d = a.d - b.d, c;
	}
	void operator -=(const Hash &a) { *this = *this - a; }
	friend bool operator ==(const Hash &a, const Hash &b) {
		return a.a == b.a && a.b == b.b && a.c == b.c && a.d == b.d;
	}
} val[maxn], ori[maxn], sum[maxn], tot, res;

signed main() {
	int n = read(), m = read();
    fop(i, 1, n) val[i] = Hash(rd(rnd)), res += val[i];
    fop(i, 1, m) {
        int u = read(), v = read();
        sum[v] += val[u], ori[v] += val[u], tot += val[u];
    }
    int q = read();
    fop(i, 1, q) {
        int op = read(), u = read();
        if (op == 1) sum[read()] -= val[u], tot -= val[u];
        else if (op == 2) tot -= sum[u], sum[u].init();
        else if (op == 3) sum[read()] += val[u], tot += val[u];
        else tot += ori[u] - sum[u], sum[u] = ori[u];
        puts(tot == res ? "YES" : "NO");
    }
}

标签:Hash,val,int,rd,在手,read,哈希,const
From: https://www.cnblogs.com/eafoo/p/16878784.html

相关文章

  • 一致性哈希算法原理详解
    一、普通hash算法(取模算法):在了解一致性哈希算法之前,我们先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现......
  • Redis:哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍
    HLENHLENkey时间复杂度:O(1)返回哈希表​​key​​中域的数量。演示当哈希表​​key​​不存在时,返回0。HSTRLENHSTRLENkeyfield可用版本:>=3.2.0时间复杂度:O(1)返回哈希......
  • [哈希]leetcode242. 有效的字母异位词
    题目给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若 s和t 中每个字符出现的次数都相同,则称 s和t 互为字母异位词。示例 1:输入:......
  • [哈希]leetcode349. 两个数组的交集
    题目给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。示例1:输入:nums1=[1,2,2,1],nums2......
  • 均值哈希算法计算图片相似度
    均值哈希算法一张图片就是一个二维信号,它包含了不同频率的成分。亮度变化小的区域是低频成分,它描述大范围的信息。而亮度变化剧烈的区域(比如物体的边缘)就是高频的成分,它描......
  • 哈希表和有序表
    packageclass03;importjava.util.HashMap;importjava.util.HashSet;importjava.util.TreeMap;/***哈希表和有序表*/publicclassHashMapAndSortedMap{......
  • 将超长emmx格式的图片(脑图)转为png/jpg格式方便在手机上查看(失败过程+三种解决方案)
    故事背景:由于本人整理Python3爬虫的知识体系,足足写了三米多长(通过将手机放大图像字体到刚好看着舒服,然后往下滑动图片测出此长度)失败第一次:我将图片用MindMaster(我画此脑图......
  • CF1743E FTL(哈希,DP)——关于 xorshift 的哈希冲突
    CF1743EFTL有两把laser枪,一把伤害\(p_0\)两发间隔时间至少\(t_0\),另一把\(p_1,t_1\)。打敌方太空船,血量\(N\)防御值\(s\),如果某个时刻你对太空船打出\(P\)的......
  • 【XSY3333】魔力(差分,哈希)
    ”每个字符出现次数相等“可以使用差分简化:记录数组\(s_c\)为字符\(c\)的出现次数减去字符\(\texttt{"a"}\)的出现次数,那么条件等价于\(s\)数组全为\(0\)。维护......
  • 哈希表——两数之和
    classSolution{public:vector<int>twoSum(vector<int>&nums,inttarget){std::unordered_map<int,int>map;for(inti=0;i<nums.size(......