#include #define ALL(v) std::begin(v),std::end(v) using lint=long long; using ld=long double; void cmx(lint&x,lint y){if(x::max()/3; lint n,m;std::cin>>n>>m; std::vectora(n); for(lint&x:a)std::cin>>x; std::vector>xw(m); for(auto&&[x,w]:xw){ std::cin>>x>>w;x--; } { lint wmax=0; for(auto&&[x,w]:xw)cmx(wmax,w); for(auto&&[x,w]:xw)x+=wmax; std::vectorswp(n+2*wmax,inf); std::copy(ALL(a),swp.begin()+wmax); n+=2*wmax; swp.swap(a); } auto ok=[&](lint c){ if(c==0){ lint sum=0; for(auto&&[x,w]:xw)sum+=w; return std::all_of(ALL(a),[sum](lint x){return sum<=x;}); } std::vectorb(n+1); for(auto&&[x,w]:xw){ lint q=w/c; b.at(x-q+1)+=c; b.at(x+1)-=2*c; b.at(x+q+1)+=c; } std::partial_sum(ALL(b),b.begin()); for(auto&&[x,w]:xw){ lint q=w/c,r=w%c; b.at(x-q)+=r; b.at(x+q+1)-=r; } std::partial_sum(ALL(b),b.begin()); for(lint i=0;i