bzoj 3207 花神的嘲讽计划Ⅰ 主席树
2016-04-18 19:30
267 查看
Hash 一下就好。。模板题。。注意Unsigned long long加爆的问题
ms 这题卡Unsigned int..
ms 这题卡Unsigned int..
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define UL unsigned long long #define inf 18446744073709551615UL const int N=8000005; struct node{ int ls,rs,size; }tr ; int cnt,n,m,k,rt[N/40]; UL bse,w[N/40],Hash[N/40]; void insert(int &x,UL l,UL r,UL pos){ tr[++cnt]=tr[x];x=cnt;tr[x].size++; if(l==r) return; UL mid=l/2+r/2;if((l&1)&&(r&1)) mid++; if(pos<=mid) insert(tr[x].ls,l,mid,pos); else insert(tr[x].rs,mid+1,r,pos); } int ask(int pre,int x,UL l,UL r,UL k){ if(l==r) return tr[x].size-tr[pre].size; UL mid=l/2+r/2;if((l&1)&&(r&1)) mid++; if(k<=mid) return ask(tr[pre].ls,tr[x].ls,l,mid,k); else return ask(tr[pre].rs,tr[x].rs,mid+1,r,k); } int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=n;i++) Hash[i]=Hash[i-1]*107+w[i]; bse=1; for(int i=1;i<=k;i++) bse*=107; for(int i=k;i<=n;i++) {rt[i]=rt[i-1]; insert(rt[i],1,inf,Hash[i]-Hash[i-k]*bse);} int x,y,_val; while(m--){ scanf("%d%d",&x,&y);bse=0; for(int i=1;i<=k;i++){scanf("%d",&_val);bse=bse*107+_val;} if(ask(rt[x+k-2],rt[y],1,inf,bse)) puts("No"); else puts("Yes"); } return 0; }
相关文章推荐
- [CF580B]Kefa and Company(滑动窗口)
- poj(1724)——ROADS
- YTU 2295: KMP模式匹配 一(串)
- 面试题的一些总结(1)
- Caffe解惑:Caffe中是如何控制loss的
- 其实很多问题都可以归根到底为能力不足——至第一次接手项目的我
- 搭建spring框架步骤
- Linux下Hook一个共享库函数
- theano tutorial(四) logistic regression 练习
- Good Tools for downloading Youtube source
- popScene 动画
- java毕向东听课笔记16(线程5)
- charles捕获手机端请求数据
- pyfits过滤数据更新文件。
- 2016 Google Code Jam Round 1A (A. The Last Word,B. Rank and File,C. BFFs(二元环))
- 第八周项目1-数组做数据成员
- hdu 5667 Sequence (矩阵快速幂)
- meta标签大全(荐)
- OkHttp深入学习(三)——Cache
- 简单Profibus/DP实验系统的组建