#include#include #include #include using namespace std;typedef long long ll;const int maxn=1e5+7;int belong[maxn],l[maxn],r[maxn],block,num,n,q;ll a[maxn],Max[maxn];void build(){ block=sqrt(n); num=n/block;if(n%block!=0) num++; for(int i=1;i<=num;++i){ //num 不要写成n l[i]=(i-1)*block+1;r[i]=i*block; } r[num]=n;//收敛 for(int i=1;i<=n;++i){ belong[i]=(i-1)/block+1; } for(int i=1;i<=n;++i){ Max[belong[i]]=max(Max[belong[i]],a[i]); }}void update(int x,int y){ //单点更新 a[x]+=y; Max[belong[x]]=max(Max[belong[x]],a[x]);}ll ask(int x,int y){ //变量与数组重名 ll ans=-1; if(belong[x]==belong[y]){ for(int i=x;i<=y;++i){ ans=max(ans,a[i]); } return ans; } for(int i=x;i<=r[belong[x]];++i){ ans=max(ans,a[i]); } for(int i=belong[x]+1;i