Submission #12955

#TimeUsernameProblemLanguageResultExecution timeMemory
12955gs13068Watching (JOI13_watching)C++98
100 / 100
52 ms16780 KiB
#include<cstdio> #include<algorithm> long long c[2002]; int x[2002]; int y[2002]; int d[2002][2002]; int main() { int l,r,mid; int i,j,k,n,a,b; scanf("%d%d%d",&n,&a,&b); if(a+b>=n) { puts("1"); return 0; } for(i=1;i<=n;i++)scanf("%lld",&c[i]); std::sort(c+1,c+n+1); l=1; r=(1e9+a+b+b-1)/(a+b+b); for(i=0;i<=n&&i<=a;i++)for(j=0;i+j<=n&&j<=b;j++)d[i][j]=1; while(l<r) { mid=(l+r)/2; for(i=1;i<=n;i++) { x[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid)-c; y[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid+mid)-c; } x[n+1]=y[n+1]=n+1; for(i=0;i<=n&&i<=a;i++) { for(j=0;i+j<=n&&j<=b;j++) { d[i][j]=1; if(j>0&&y[d[i][j-1]]>d[i][j])d[i][j]=y[d[i][j-1]]; if(i>0&&x[d[i-1][j]]>d[i][j])d[i][j]=x[d[i-1][j]]; if(d[i][j]>n)break; } if(i+j<=n&&j<=b)break; } if(i<=n&&i<=a)r=mid; else l=mid+1; } printf("%d",l); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...