BZOJ3847 : ZCC loves march
注意到集结操作相当于合并一些点
于是我们可以使用并查集
对于每一行、每一列维护一个链表,储存里面的点
查询x时,在并查集中找到x的祖先u,此时x的坐标就是u的坐标
然后扫描u所在行列的链表,依次删除每个点,并把这些点合并成一个新点,同时计算贡献
对于修改操作,可以看作是分离,新建一个点代表修改后的点,然后对于原来的点减掉贡献即可
#include<cstdio>
#include<map>
#define N 300010
#define P 1000000007
typedef long long ll;
int n,m,i,id,f[N],C[N],tot,x,y,g[N<<1],nxt[N<<1],v[N<<1],ed,cnt,u;
ll X[N],Y[N],d,nx,ny,ans;
bool del[N];
std::map<ll,int>locx,locy;
char op[5];
inline ll sqr(ll x){x%=P;return x*x%P;}
inline int posx(ll x){return locx[x]?locx[x]:locx[x]=++cnt;}
inline int posy(ll y){return locy[y]?locy[y]:locy[y]=++cnt;}
inline void addedge(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
inline void addset(int x){addedge(posx(X[x]),x),addedge(posy(Y[x]),x);}
inline void addnode(ll x,ll y,int c){X[++tot]=x,Y[tot]=y,C[tot]=c,f[tot]=tot;}
inline int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
int main(){
scanf("%d%lld",&n,&nx);
for(i=1;i<=n;i++)scanf("%lld%lld",&nx,&ny),addnode(nx,ny,1);
for(i=1;i<=n;i++)addnode(X[i],Y[i],1),addset(tot),f[i]=tot;
scanf("%d",&m);
while(m--){
scanf("%s%d",op,&x);u=F(x^=ans);
if(op[0]=='Q'){
addnode(X[u],Y[u],ans=0);
for(i=g[id=locx[X[u]]];i;i=nxt[i])if(!del[v[i]])del[v[i]]=1,(ans+=sqr(Y[v[i]]-Y[u])*C[v[i]])%=P,C[tot]+=C[v[i]],f[v[i]]=tot;
g[id]=0,addedge(id,tot);
for(i=g[id=locy[Y[u]]];i;i=nxt[i])if(!del[v[i]])del[v[i]]=1,(ans+=sqr(X[v[i]]-X[u])*C[v[i]])%=P,C[tot]+=C[v[i]],f[v[i]]=tot;
g[id]=0,addedge(id,tot);
printf("%lld\n",ans);
}else{
scanf("%lld",&d);nx=X[u],ny=Y[u];
if(op[0]=='U')nx-=d;
if(op[0]=='D')nx+=d;
if(op[0]=='L')ny-=d;
if(op[0]=='R')ny+=d;
C[u]--,addnode(nx,ny,1),addset(f[x]=tot);
}
}
return 0;
}
BZOJ3847 : ZCC loves march的更多相关文章
- HDU 4879 ZCC loves march (并查集,set,map)
		题面以及思路:https://blog.csdn.net/glqac/article/details/38402101 代码: #include <bits/stdc++.h> #defi ... 
- 2014---多校训练2(ZCC Loves Codefires)
		ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ... 
- HDU 4876 ZCC loves cards(暴力剪枝)
		HDU 4876 ZCC loves cards 题目链接 题意:给定一些卡片,每一个卡片上有数字,如今选k个卡片,绕成一个环,每次能够再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个 ... 
- HDU-4882                                      ZCC Loves Codefires
		http://acm.hdu.edu.cn/showproblem.php?pid=4882 ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Ot ... 
- HDU 4882 ZCC Loves Codefires (贪心)
		ZCC Loves Codefires 题目链接: http://acm.hust.edu.cn/vjudge/contest/121349#problem/B Description Though ... 
- hdu 4873 ZCC Loves Intersection(大数+概率)
		pid=4873" target="_blank" style="">题目链接:hdu 4873 ZCC Loves Intersection ... 
- HDU 4882  ZCC Loves Codefires(贪心)
		 ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ... 
- hdu 4882 ZCC Loves Codefires(数学题+贪心)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4882 ------------------------------------------------ ... 
- hdu 4876 ZCC loves cards(暴力)
		题目链接:hdu 4876 ZCC loves cards 题目大意:给出n,k,l,表示有n张牌,每张牌有值.选取当中k张排列成圈,然后在该圈上进行游戏,每次选取m(1≤m≤k)张连续的牌,取牌上值 ... 
随机推荐
- DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求
			转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ... 
- python-twisted系列(1)
			前言: 这不是一个入门教程.而是知识点的梳理. 开胃图: 这是一个TCP server的“交互图”. reactor 它是Twisted事件处理的核心.包括一些处理网络通讯,线程和事件分派的接口. 一 ... 
- 进入git diff 界面,无法继续输入命令
			在终端,输入 git diff 文件名 命令之后回车,显示如下界面: 在网上查找,说输入q回车即可退出显示,执行,果然有效,输入h可以显示所有命令 命令如下: SUMMARY OF LESS COM ... 
- 分享一个强大的采集类,还可以模拟php多进程
			做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ... 
- 重新编译安装gcc-4.1.2(gcc版本降级)之TFS安装
			wget http://gcc.parentingamerica.com/releases/gcc-4.1.2/gcc-4.1.2.tar.gz tar -zxfv gcc-4.1.2.tar.gz ... 
- ecshop的商品系统数据库整合
			-- 表的结构 `ecs_shop_config` '全站配置信息表' 商店设置 `id` '全站配置信息自增id',`parent_id` '父节点id,取值于该表id字段的值',`co ... 
- 【转】PowerDesigner使用方法小结
			本文转自:http://www.cnblogs.com/afarmer/archive/2012/11/05/2755327.html PowerDesigner多用来进行数据库模型设计,具有SQL语 ... 
- windows下批量删除文件
			FORFILES /P d:\www /D -7 /S /M ex*.log /C "cmd /c del @path" 删除d:\www目录下7天前ex*.log的所有文件 例子 ... 
- Linux/Ubuntu下解压命令
			.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ... 
- CodeForces - 426A(排序)
			Sereja and Mugs Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ... 
