Submission #6853

#TimeUsernameProblemLanguageResultExecution timeMemory
6853gs12117역사적 조사 (JOI14_historical)C++98
100 / 100
516 ms5780 KiB
#include<stdio.h> #include<algorithm> #define BSIZ 300 int n,q; int x[100100]; struct sn{ int loc,val; bool operator<(const sn&r)const{ return val<r.val; } }; sn st[100100]; int a[100100]; int cpr[100100]; int qry[100100][2]; long long int ans[100100]; long long int sv[100100]; int cprn; long long int mans; int mocc[100100]; int c[310]; int cn; int main(){ int i,j,k,p,bf,df; scanf("%d%d",&n,&q); for(i=0;i<n;i++){ scanf("%d",&x[i]); st[i].val=x[i]; st[i].loc=i; } std::sort(st,st+n); for(i=0;i<n;i++){ a[st[i].loc]=cprn; if(i==n-1||st[i].val!=st[i+1].val){ cpr[cprn]=st[i].val; cprn++; } } for(i=0;i<q;i++){ scanf("%d%d",&qry[i][0],&qry[i][1]); qry[i][0]--; qry[i][1]--; st[i].loc=i; st[i].val=qry[i][1]; } std::sort(st,st+q); for(i=0;i<=(n-1)/BSIZ;i++){ cn=0; for(j=0;j<BSIZ&&j+i*BSIZ<n;j++){ if(mocc[a[j+i*BSIZ]]==1)continue; mocc[a[j+i*BSIZ]]=1; c[cn]=a[j+i*BSIZ]; cn++; } mans=0; bf=i*BSIZ; df=i*BSIZ; for(j=0;j<q;j++){ p=st[j].loc; if(qry[p][0]/BSIZ==i){ for(k=bf;k<=qry[p][1];k++){ sv[a[k]]+=cpr[a[k]]; if(mocc[a[k]]==0&&mans<sv[a[k]])mans=sv[a[k]]; } bf=qry[p][1]+1; if(df<qry[p][0]){ for(k=df;k<qry[p][0];k++){ sv[a[k]]-=cpr[a[k]]; } } else{ for(k=qry[p][0];k<df;k++){ sv[a[k]]+=cpr[a[k]]; } } df=qry[p][0]; ans[p]=mans; for(k=0;k<cn;k++){ if(sv[c[k]]>ans[p])ans[p]=sv[c[k]]; } } } for(k=0;k<cprn;k++){ if(sv[k]==0)continue; sv[k]=0; } for(j=0;j<cn;j++){ mocc[c[j]]=0; } } for(i=0;i<q;i++){ printf("%lld\n",ans[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...