P是端点,牛在区域中啊。。。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=1005; int pt[N],s[N]; int n,p,c; int slove(int st){ int ans=0; int l=st,r=p-1,m; while(l<=r){ m=(l+r)/2; if(s[m]-s[st-1]<=c){ ans=(m-st+1); l=m+1; } else r=m-1; } return ans; } int main(){ int tmp; while(scanf("%d%d%d",&n,&p,&c)!=EOF){ memset(pt,0,sizeof(pt)); for(int i=1;i<=n;i++){ scanf("%d",&tmp); pt[tmp]++; } s[0]=0; for(int i=1;i<p;i++){ s[i]=s[i-1]+pt[i]; } int ans=0; for(int i=1;i<p;i++){ ans=max(ans,slove(i)); } printf("%d ",ans); } return 0; }