首页 > 其他分享 >CF 869E(The Untended Antiquity-Hash值维护连通性)

CF 869E(The Untended Antiquity-Hash值维护连通性)

时间:2022-10-24 15:37:22浏览次数:52  
标签:Hash r1 r2 869E ll int read 连通性 define


一个地图,然后三种操作
1.一个矩阵四周加上障碍 (不与任何障碍相交)
2.一个矩阵四周的障碍消除
3.问你两个点之间是否纯在一条路径不经过障碍
矩阵大小2500^2,操作10w

树状数组
考虑每次操作定一个hash值,然后每次在那个矩阵上xor那个hash值,问题转化为2点hash值是否相同。

CF 869E(The Untended Antiquity-Hash值维护连通性)_i++

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef unsigned long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
int n,m;
#define
ll f[MAXN][MAXN]={0};
void add(int x,int y,ll v) {
for(int i=x;i<=n;i+=i&(-i))
for(int j=y;j<=m;j+=j&(-j))
f[i][j]^=v;
}
ll qur(int x,int y) {
ll v=0;
for(int i=x;i;i-=i&(-i))
for(int j=y;j;j-=j&(-j))
v^=f[i][j];
return v;
}
map < pair<pi, pi > ,ll > h;
ll rand(int r1,int c1,int r2,int c2) {
if (h.find(mp(mp(r1,c1),mp(r2,c2)))!=h.end())
return h[mp(mp(r1,c1),mp(r2,c2))];
ll rn=rand();
rn= (rn<<16ULL)| rand();
srand(rn);
h[mp(mp(r1,c1),mp(r2,c2)) ]=rn;
return rn;
}
int q;
int main()
{
// freopen("E.in","r",stdin);
// freopen(".out","w",stdout);
srand(123);
n=read(),m=read(),q=read();
n+=3,m+=3;
For(i,q) {
int t=read(),r1=read(),c1=read(),r2=read(),c2=read();
ll p=rand(r1,c1,r2,c2);
if (t<=2) {
add(r2+1,c2+1,p);
add(r2+1,c1,p);
add(r1,c2+1,p);
add(r1,c1,p);
}
else {
ll ans1=qur(r2,c2);
ll ans2=qur(r1,c1);
if (ans1==ans2) {
puts("Yes");
}else puts("No");

}
}



return 0;
}


标签:Hash,r1,r2,869E,ll,int,read,连通性,define
From: https://blog.51cto.com/u_15724837/5789898

相关文章

  • hash 表
    Hash表1E5个数,数据范围在1E-9到1E9,需要查找某个数,Hash表用接近O(1)的时间办到,进行映射,取模,映射到某个数,模谁呢,这个数一般是比较大的质数,这样矛盾的概率就比较小。拉链法......
  • java基础HashSet 集合TreeSet集合
           ......
  • 今天聊下Java中的HashMap---Java中用的就很多的集合框架
    先说下HashMap的定义HashMap是一个散列表,存储的内容是键值对(key-value)映射。HashMap实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键......
  • HashMap 源码分析(五)
    ......
  • HashMap
    在jdk1.7版本其底层结构是:数组+链表在jdk1.8版本之后底层结构修改成为:数组+链表+红黑树在扩容机制上:jdk1.7:当满足扩容条件后-->其初始默认的容量为16,每次扩容都×2;......
  • hash和history
    hash和history路由的区别在了解路由模式前,我们先看下什么是单页面应用,vue-router的实现原理是怎样的,这样更容易理解路由。SPA与前端路由SPA(单页面应用,全程为:Single-......
  • 主席树-----动态开点,不hash
    ​​POJ-2104 ​​第k大#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<vector>#include<iostream>#include<algorithm>usingname......
  • Java中HashMap的几种遍历方式
    publicstaticvoidmain(String[]args){Map<String,Object>map=newHashMap<>();map.put("姓名","张三");map.put("年龄",30);......
  • JDK1.7和JDK1.8中concurrentHashMap的区别
    一、JDK1.8和JDK1.7的几个区别:数据结构:取消了Segment分段锁的数据结构,取而代之的是数组+链表+红黑树的结构。保证线程安全机制:JDK1.7采用segment的分段锁机制实现线程......
  • 【散列】散列表HashTable分离链接法类模板的实现
    分离链接法(separatechaining),做法是将散列到同一个值得所有元素保留到一个链表List中。如果这个元素是个新的元素,那么它将被插入到链表的前端。插入前端的原因是:常......