标签:
8Mao and Hungar have to choose any part of this wall as their own wall.
5 3 4 5 5 2 3 1 2 3
9 6
无
cjl
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<math.h> 7 using namespace std; 8 typedef long long LL; 9 int uu[1000005]; 10 int flag[1000005]; 11 int yy[1000005]; 12 int main(void) 13 { int i,j,k; 14 while(scanf("%d",&k)!=EOF) 15 { memset(flag,0,sizeof(flag)); 16 memset(yy,0,sizeof(yy)); 17 for(i=0;i<k;i++) 18 { 19 scanf("%d",&uu[i]); 20 } 21 LL ans=1;long long sum=0;int vv=0; 22 int l=0;int r=0;flag[uu[0]]=1;int kp=0; 23 while(l<=r+1&&r<k-1) 24 { 25 while(r<k-1) 26 { 27 r++; 28 if(flag[uu[r]]==1) 29 {LL yyk=0; 30 if(ans>0&&!yy[r-1]) 31 { 32 yy[r-1]=1; 33 if(kp>l) 34 { 35 yyk=kp-l+1; 36 } 37 sum+=ans*(ans-1)/2;if(yyk>0)sum-=yyk*(yyk-1)/2; 38 kp=r-1; 39 }ans++;flag[uu[r]]++;break; 40 } 41 else if(!flag[uu[r]]) 42 { 43 ans++;flag[uu[r]]++; 44 } 45 } 46 if(r==k-1&&flag[uu[r]]==1) 47 break; 48 else {flag[uu[r]]--;flag[uu[l]]--;ans-=2;r--;l++;} 49 } 50 if(ans>0){sum+=ans*(ans-1)/2;sum+=(LL)k;LL yyk=kp-l+1;if(yyk>0){sum-=yyk*(yyk-1)/2;}} 51 printf("%I64d\n",sum); 52 } 53 return 0; 54 }
标签:
原文地址:http://www.cnblogs.com/zzuli2sjy/p/5270962.html