#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
const long long N=500000;
typedef map<long long,long long> iim; iim mm;
iim::iterator ii(long long x){return --mm.upper_bound(x);}
long long lv(long long x){return ii(x)->second;}
long long n,m,a[N],sr[N],i,d,b,pd=0,pb=0,pc=0,dd,l,r,v,c,q;
long long val(long long x){return (x>=pc?pb:lv(x))+dd*a[x];}
int main(){
scanf("%lld%lld",&n,&m);
for(i=0;i<n;++i)scanf("%lld",a+i);
sort(a,a+n);
sr[n-1]=a[n-1];for(i=n-2;i>=0;--i)sr[i]=sr[i+1]+a[i];
mm[0]=0;
for(i=0;i<m;++i){
scanf("%lld%lld",&d,&b);
dd=d-pd;
l=0;r=n-1;
while(r-l>1){
c=(r+l)/2;v=val(c);
if(v>b)r=c;else l=c;
}
c=val(l)>b?l:r;
q=sr[c]*dd-(b-pb)*(n-c);
printf("%lld\n",q);
if(c>pc)mm[c]=b-val(c);
else if(c<pc)mm.erase(++ii(pc),mm.end());
pc=c;pb=b;pd=d;
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <cstdio> #include <algorithm> #include <map> using namespace std; const long long N=500000; typedef map<long long,long long> iim; iim mm; iim::iterator ii(long long x){return --mm.upper_bound(x);} long long lv(long long x){return ii(x)->second;} long long n,m,a[N],sr[N],i,d,b,pd=0,pb=0,pc=0,dd,l,r,v,c,q; long long val(long long x){return (x>=pc?pb:lv(x))+dd*a[x];} int main(){ scanf("%lld%lld",&n,&m); for(i=0;i<n;++i)scanf("%lld",a+i); sort(a,a+n); sr[n-1]=a[n-1];for(i=n-2;i>=0;--i)sr[i]=sr[i+1]+a[i]; mm[0]=0; for(i=0;i<m;++i){ scanf("%lld%lld",&d,&b); dd=d-pd; l=0;r=n-1; while(r-l>1){ c=(r+l)/2;v=val(c); if(v>b)r=c;else l=c; } c=val(l)>b?l:r; q=sr[c]*dd-(b-pb)*(n-c); printf("%lld\n",q); if(c>pc)mm[c]=b-val(c); else if(c<pc)mm.erase(++ii(pc),mm.end()); pc=c;pb=b;pd=d; } return 0; } |
English