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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<cstdio>
#include<algorithm>
#define N 1050000
typedef long long ll;
int n,m,i,a[N/2];ll now,old,R,ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void read(ll&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10LL)+=c-'0';}
struct P{
  bool a;ll b,c;
  P(){a=1,b=c=0;}
  P(bool _a,ll _b,ll _c){a=_a,b=_b,c=_c;}
  P operator+(P B){return P(a&B.a,b*B.a+B.b,c*B.a+B.c);}
}tag[N];
struct Node{ll vl,vr,vs,s;}T[N];
inline void add(int x,P p,int a,int b){
  if(p.a){
    T[x].vl+=p.b+p.c*::a[a];
    T[x].vr+=p.b+p.c*::a[b];
    T[x].vs+=p.b*(b-a+1)+p.c*T[x].s;
  }else{
    T[x].vl=p.b+p.c*::a[a];
    T[x].vr=p.b+p.c*::a[b];
    T[x].vs=p.b*(b-a+1)+p.c*T[x].s;
  }
  tag[x]=tag[x]+p;
}
inline void pb(int x,int a,int b){
  int mid=(a+b)>>1;
  add(x<<1,tag[x],a,mid),add(x<<1|1,tag[x],mid+1,b);
  tag[x]=P();
}
void build(int x,int a,int b){
  if(a==b){T[x].s=::a[a];return;}
  int mid=(a+b)>>1;
  build(x<<1,a,mid),build(x<<1|1,mid+1,b);
  T[x].s=T[x<<1].s+T[x<<1|1].s;
}
void check(int x,int a,int b){
  if(T[x].vr<=R)return;
  if(T[x].vl>R){
    ans+=T[x].vs-R*(b-a+1);
    add(x,P(0,R,0),a,b);
    return;
  }
  pb(x,a,b);
  int mid=(a+b)>>1;
  check(x<<1,a,mid),check(x<<1|1,mid+1,b);
  T[x].vl=T[x<<1].vl,T[x].vr=T[x<<1|1].vr;
  T[x].vs=T[x<<1].vs+T[x<<1|1].vs;
}
int main(){
  for(read(n),read(m),i=1;i<=n;i++)read(a[i]);
  std::sort(a+1,a+n+1);
  build(1,1,n);
  while(m--){
    read(now),read(R);
    add(1,P(1,0,now-old),1,n);
    ans=0;
    check(1,1,n);
    old=now;
    printf("%lld\n",ans);
  }
  return 0;
}