bzoj4546 codechef XRQRS
2016-04-23 15:28
399 查看
可持久化trie
代码
代码
#include<cstdio> #define N 10000010 #define M 600100 int tt,m,n; int i,tot,typ,a,b,c,last,num; int trie[M],v[30]; int cnt,f [3]; void add(int &x,int y,int z) { x=++cnt; int tmp=x,i; for (i=1;i<=19;i++)v[i]=z%2,z/=2; for (i=19;i>=1;i--) { f[tmp][0]=f[y][0]; f[tmp][1]=f[y][1]; f[tmp][2]=f[y][2]+1; f[tmp][v[i]]=++cnt; tmp=f[tmp][v[i]];y=f[y][v[i]]; } f[tmp][2]=f[y][2]+1; } int query1(int x,int y,int z) { int ans=0,i; for (i=1;i<=19;i++)v[i]=z%2,z/=2; for (i=19;i>=1;i--) { if (v[i]) { ans+=(f[f[y][0]][2]-f[f[x][0]][2]); x=f[x][1]; y=f[y][1]; } else { x=f[x][0]; y=f[y][0]; } } ans+=(f[y][2]-f[x][2]); return ans; } int query2(int x,int y,int z) { int i,ans=0; for (i=19;i>=1;i--) { if (f[f[y][0]][2]-f[f[x][0]][2]>=z) { //printf("0 %d\n",f[y][2]); x=f[x][0]; y=f[y][0]; } else { // printf("1 %d\n",f[y][2]); ans+=(1<<(i-1)); z=z-(f[f[y][0]][2]-f[f[x][0]][2]); x=f[x][1]; y=f[y][1]; } } return ans; } int query3(int x,int y,int z) { int i,ans=0; for (i=1;i<=19;i++) v[i]=z%2,z/=2; for (i=19;i>=1;i--) { if (f[f[y][1-v[i]]][2]-f[f[x][1-v[i]]][2]) { ans+=(1-v[i])*(1<<(i-1)); y=f[y][1-v[i]]; x=f[x][1-v[i]]; } else { ans+=v[i]*(1<<(i-1)); y=f[y][v[i]]; x=f[x][v[i]]; } } return ans; } int main() { scanf("%d",&n); tot=0;trie[0]=++cnt; for (i=1;i<=n;i++) { scanf("%d",&typ); if (typ==1) { scanf("%d",&a); tot++;add(trie[tot],trie[tot-1],a); } else if (typ==2) { scanf("%d%d%d",&a,&b,&c); printf("%d\n",query3(trie[a-1],trie[b],c)); } else if (typ==3) { scanf("%d",&a); tot-=a;cnt=trie[tot+1]-1; } else if (typ==4) { scanf("%d%d%d",&a,&b,&c); printf("%d\n",query1(trie[a-1],trie[b],c)); } else if (typ==5) { scanf("%d%d%d",&a,&b,&c); printf("%d\n",query2(trie[a-1],trie[b],c)); } } }
相关文章推荐
- CSS---左右固定,中间自适应布局
- xhr异步方法
- 07@设计模式 -(05) 筛选模式
- VRP平台基本操作
- C++ OJ HDU 1159 Common Subsequence
- 万兆带宽测试方法
- c++ primer(第五版)学习笔记及习题答案代码版(第一章)
- 设置MySQL自动增长从某个指定的数开始
- Learning React Native笔记
- HDU 5671 Matrix
- 01背包与贪心的区别
- C++ OJ HDU 1243 反恐训练营
- 中文期刊分类结果记录
- select的onchange事件问题
- 微信公众平台、开放平台、智能平台区别
- 原生JS ajax框架代码
- 91. Decode Ways
- iOS 压力测试
- Nginx安装
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式