HNOI016 大数 莫队
来源:互联网 发布:淘宝店铺装修平台 编辑:程序博客网 时间:2024/06/01 08:01
我们处理一个前缀或者后缀就变成了区间相同数字的个数了
引用LZX的来说就是 http://blog.csdn.net/lzxzxx/article/details/51197592
/* ***********************************************Author :BPM136Created Time :2016/4/20 9:48:45File Name :C.cpp************************************************ */#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>#include<cmath>#include<cstring>#include<iomanip>#include<bitset>#include<queue>#include<ctime>#include<set>#include<utility>#include<vector>#include<functional>#include<numeric>#include<memory>#include<iterator>#define LL long long#define DB double#define LB long double#define UL unsigned long#define ULL unsigned long long#define get(a,i) a&(1<<(i-1))#define PAU putchar(0)#define ENT putchar(32)#define clr(a,b) memset(a,b,sizeof(a))#define fo(_i,_a,_b) for(int _i=_a;_i<=_b;_i++)#define fd(_i,_a,_b) for(int _i=_a;_i>=_b;_i--)#define efo(_i,_a) for(int _i=last[_a];_i!=0;_i=e[_i].next)#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);#define mkd(x) freopen(#x".in","w",stdout);#define setlargestack(x) int size=x<<20;char *p=(char*)malloc(size)+size;__asm__("movl %0, %%esp\n" :: "r"(p));#define end system("pause")using namespace std;LL read(){ LL f=1,d=0;char s=getchar(); while (s<48||s>57){if (s==45) f=-1;s=getchar();} while (s>=48&&s<=57){d=d*10+s-48;s=getchar();} return f*d;}LL readln(){ LL f=1,d=0;char s=getchar(); while (s<48||s>57){if (s==45) f=-1;s=getchar();} while (s>=48&&s<=57){d=d*10+s-48;s=getchar();} while (s!=10) s=getchar(); return f*d;}inline void write(LL x){ if(x==0){putchar(48);return;}if(x<0)putchar(45),x=-x; int len=0,buf[20];while(x)buf[len++]=x%10,x/=10; for(int i=len-1;i>=0;i--)putchar(buf[i]+48);return;}inline void writeln(LL x){write(x);ENT;}#define N 100005int a[N];LL MOD,val[N],A[N],hash[N],nm=0;struct question{int l,r,id;int bid;int ans;}Q[N];int n,m;char s[N];int sb;bool cmpQ(question a,question b){if(a.bid!=b.bid)return a.bid<b.bid;if(a.r!=b.r)return a.r<b.r;return a.l<b.l;}bool cmpid(question a,question b){return a.id<b.id;}void prework(){A[++n]=0;LL po10=1;fd(i,n,1){(A[i]=A[i+1]+a[i]*po10)%=MOD;hash[++nm]=A[i];(po10*=10)%=MOD;}sort(hash+1,hash+nm+1);fo(i,1,n){A[i]=lower_bound(hash+1,hash+nm+1,A[i])-hash;}sort(Q+1,Q+m+1,cmpQ);}void work(){int l=1,r=0,anss=0;fo(i,1,m){while(r<Q[i].r)anss+=val[A[++r]]++;while(r>Q[i].r)anss-=--val[A[r--]];while(l>Q[i].l)anss+=val[A[--l]]++;while(l<Q[i].l)anss-=--val[A[l++]];Q[i].ans=anss;}sort(Q+1,Q+m+1,cmpid);}int main(){//file(C);MOD=read();scanf("%s",s+1);n=strlen(s+1);fo(i,1,n)a[i]=s[i]-'0';m=read(); sb=sqrt(n);fo(i,1,m){Q[i].l=read(),Q[i].r=read();Q[i].r++;Q[i].id=i;Q[i].bid=(Q[i].l-1)/sb+1;}prework();#define DEBUG look//fo(i,1,m)cout<<Q[i].l<<' '<<Q[i].r<<endl;work();fo(i,1,m){cout<<Q[i].ans<<endl;}return 0;}
0 0
- HNOI016 大数 莫队
- 【bzoj4542】[Hnoi2016]大数 莫队
- 4542: [Hnoi2016]大数|莫队
- 【bzoj4542】【HNOI2016】【大数】【莫队】
- 【BZOJ4542】大数, 莫队
- 【BZOJ 4542】大数 【莫队】
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- 大数
- Gradle sync failed: Gradle DSL method not found: 'android()'
- 汉邦高科监控视频删除后恢复
- 安卓开发——问题:设置Imageview的maxHeight、minHeight时无效
- Xcode7.1网络请求出错
- 无共享架构
- HNOI016 大数 莫队
- intel dpdk 在虚拟机 VMware 中安装部署
- jQuery阻止冒泡事件的几种方法
- javascript中如何删掉字符串中的反斜杠
- 计算机网络的数据链路层的三个基本的问题
- Oryx2源码学习
- c
- Redis支持5种数据类型之一Hashes
- ajax基本格式