3207: 花神的嘲讽计划Ⅰ 主席树+hash
2016-02-27 08:06
253 查看
由于长度一定,我们直接hash一下然后可持久化线段树判一下是否存在就好啦。
unsigned int被卡 unsigned long long过了
unsigned int被卡 unsigned long long过了
#include<iostream> #include<cstdio> #include<algorithm> #define U unsigned int #define base 233 #define N 500005 using namespace std; int n,m,k,cnt,size; U a ,T ,hash ,num ,table ; int root ; int ls[N*10],rs[N*10],sum[N*10]; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } inline int find(U x) { int l=1,r=cnt; while (l<=r) { int mid=l+r>>1; if (table[mid]==x) return mid; else if (table[mid]<x) l=mid+1; else r=mid-1; } return 0; } void update(int l,int r,int x,int &y,int val) { y=++size; ls[y]=ls[x]; rs[y]=rs[x]; sum[y]=sum[x]+1; if (l==r) return; int mid=l+r>>1; if (val<=mid) update(l,mid,ls[x],ls[y],val); else update(mid+1,r,rs[x],rs[y],val); } bool query(int l,int r,int x,int y,int val) { if (sum[y]-sum[x]==0) return 0; int mid=l+r>>1; if (l==r) return 1; if (val<=mid) return query(l,mid,ls[x],ls[y],val); else return query(mid+1,r,rs[x],rs[y],val); } int main() { n=read(); m=read(); k=read(); T[0]=1; for (int i=1;i<=n;i++) a[i]=a[i-1]*base+read(),T[i]=T[i-1]*base; n=n-k+1; for (int i=1;i<=n;i++) num[i]=hash[i]=a[i+k-1]-a[i-1]*T[k]; sort(num+1,num+n+1); table[++cnt]=num[1]; for (int i=2;i<=n;i++) if (num[i]!=num[i-1]) table[++cnt]=num[i]; for (int i=1;i<=n;i++) update(1,cnt,root[i-1],root[i],find(hash[i])); for (int i=1;i<=m;i++) { int x=read(),y=read()-k+1; U now=0; for (int i=1;i<=k;i++) now=now*base+read(); int pos=find(now); if (!pos||y<x) puts("Yes"); else puts(query(1,cnt,root[x-1],root[y],pos)?"No":"Yes"); } return 0; }
相关文章推荐
- 【年度总结】——踏雪留痕
- 使用批处理清理vs工程项目
- 九度 1411 -图最短路径 - 转圈
- 【技巧】“Plugin execution not covered by lifecycle configuration...“异常的处理
- lintcode-easy-Matrix Zigzag Traversal
- Activity的生命周期(三)——结合Activity的生命周期理解子类继承父类预加载数据
- 心路
- 第52课:Hadoop链式MapReduce编程实战
- 详解配置java环境变量那点事儿
- Boost MPI scatter
- Windows下查看进程及结束进程命令[转]
- 3910: 火车 LCA+并查集
- JAVA 一个简单的图形界面计算器
- Python图像处理库PIL的ImageEnhance模块介绍
- DE26 Continuation: Repeated Real Eigenvalues
- spark概览
- Activity的生命周期(二)——简单继承父类
- 正则表达式隐藏手机号中间4位数字
- jQuery插件开发代码
- Network client/server