标签:
双指针。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=400000+10; int n,k,a[maxn],b[maxn]; int cnt[maxn]; int get(int val) { int l=1,r=n; int pos=-1; while(l<=r) { int mid=(l+r)/2; if(b[mid]>val) r=mid-1; else if(b[mid]<val) l=mid+1; else pos=mid, r=mid-1; } return pos; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(b+1,b+1+n); for(int i=1;i<=n;i++) a[i]=get(a[i]); memset(cnt,0,sizeof cnt); int l=1,r=1; cnt[a[1]]++; long long ans=0; while(1) { if(cnt[a[r]]==k) { ans=ans+(long long)(n-r+1); cnt[a[l]]--; l++; } else { r++; cnt[a[r]]++; } if(l>n||r>n) break; } printf("%lld\n",ans); return 0; }
CodeForces 190D Non-Secret Cypher
标签:
原文地址:http://www.cnblogs.com/zufezzt/p/5671758.html