标签:
给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列。
输入的第一行包含一个整数T,表示组数。下接T组数据,每组第一行一个整数N,每组第二行为一个1到N的排列,数字两两之间用空格隔开。
对于每组数据,如果存在一个等差子序列,则输出一行“Y”,否则输出一行“N”。
对于100%的数据,N<=10000,T<=7
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define LL long long //别开unsigned 5 const LL mod=(LL)1e9+7; //非洲人老老实实去找别人家的素数 6 int n; 7 LL pw[10010]; 8 LL bit1[10010],bit2[10010]; 9 int a[10010]; 10 /*int binpr(int x){ 11 int sta[10]={0},top=0; 12 while(x){ 13 top++; 14 if(x&1)sta[top]=1; 15 } 16 ++top; 17 while(--top){ 18 printf("%d",sta[top]); 19 } 20 return 0; 21 }*/ 22 int min(int a,int b){ 23 return a<b?a:b; 24 } 25 int lb(int x){ 26 return x&(-x); 27 } 28 LL q1(int x){ 29 LL ans=0; 30 int i=x; 31 while(i){ 32 ans=(ans+(bit1[i]*pw[x-i])%mod)%mod; 33 i-=lb(i); 34 } 35 return ans; 36 } 37 LL q2(int x){ 38 LL ans=0; 39 int i=x; 40 while(i){ 41 ans=(ans+(bit2[i]*pw[x-i])%mod)%mod; 42 i-=lb(i); 43 } 44 return ans; 45 } 46 LL c1(int x){ 47 int i=x; 48 while(i<=n){ 49 bit1[i]=(bit1[i]+pw[i-x])%mod; 50 i+=lb(i); 51 } 52 return 0; 53 } 54 LL c2(int x){ 55 int i=x; 56 while(i<=n){ 57 bit2[i]=(bit2[i]+pw[i-x])%mod; 58 i+=lb(i); 59 } 60 return 0; 61 } 62 LL qr1(int l,int r){ 63 LL p=q1(l-1),q=q1(r); 64 return ((q-p*pw[r-l+1])%mod+mod)%mod; 65 } 66 LL qr2(int l,int r){ 67 LL p=q2(l-1),q=q2(r); 68 return ((q-p*pw[r-l+1])%mod+mod)%mod; 69 } 70 int main(){ 71 int t; 72 scanf("%d",&t); 73 pw[0]=1; 74 for(int i=1;i<=10001;i++)pw[i]=(pw[i-1]*(LL)2)%mod; 75 while(t--){ 76 scanf("%d",&n); 77 for(int i=1;i<=n;i++)scanf("%d",&a[i]);//坑点:按照这种算法以为是在线,BUT!多组数据!千万别在线做得出解就立马跳出!最起码先读进来 78 memset(bit1,0,sizeof(bit1)); 79 memset(bit2,0,sizeof(bit2)); 80 int note=0; 81 for(int i=1;i<=n;i++){ 82 int x=a[i]; 83 int len=min(n-x,x-1); 84 if(len && qr1(x-len,x-1)!=qr2(n-x-len+1,n-x)){ 85 note=1; 86 puts("Y"); 87 break; 88 } 89 c1(x); 90 c2(n-x+1); 91 } 92 if(!note)puts("N"); 93 } 94 return 0; 95 }
后记:
06年的渣机在编辑这篇题解时蓝屏一次,死机重开(未保存)五次,卡住重开(未保存)不计其数
凭借着无限的毅力更新完毕这篇久违的题解
再立个flag:我也要当更博狂魔!
标签:
原文地址:http://www.cnblogs.com/Pumbit-Legion/p/5823979.html