#include #include #ifndef ONLINE_JUDGE // #define OPEN_FILE // #define OPEN_TIME #endif #define AC return 0; #define lowbit(x) (x&(-x)) #define ll long long #define ull unsigned long long #define pii pair using namespace std; const int maxn=1e6+10,INF=0x3f3f3f3f,mod=1e9+7; const double eps=1e-8,Pi=acos(-1); mt19937_64 mt(1145); int n,m; int a[maxn]; struct Info{ ll ans,pre,suf,sum; Info(){ans=pre=suf=-INF,sum=0;} Info(ll a,ll p,ll s,ll t){ans=a,pre=p,suf=s,sum=t;} Info(ll x){ans=x,pre=x,suf=x,sum=x;} Info operator+(const Info &x)const{ return {max({ans,x.ans,suf+x.pre}),max(pre,sum+x.pre),max(x.suf,x.sum+suf),sum+x.sum}; } }; struct SegTree{ struct Node{ Info sum; }t[maxn<<2]; #define ls(p) (p<<1) #define rs(p) (p<<1|1) #define sum(p) t[p].sum #define tag(p) t[p].tag void PushUp(int p){ sum(p)=sum(ls(p))+sum(rs(p)); } void Change(int p,int l,int r,int x,Info k){ if(l==r) return sum(p)=k,void(); int mid=l+r>>1; if(x<=mid) Change(ls(p),l,mid,x,k); else Change(rs(p),mid+1,r,x,k); PushUp(p); } Info Query(int p,int l,int r,int L,int R){ if(L<=l&&R>=r) return sum(p); if(l>R||r>1; return Query(ls(p),l,mid,L,R)+Query(rs(p),mid+1,r,L,R); } Info Query(int l,int r){ return Query(1,1,n,l,r); } void Change(int x,Info k){ Change(1,1,n,x,k); } void Build(int p,int l,int r){ sum(p)={}; if(l==r) return sum(p)={a[l]},void(); int mid=l+r>>1; Build(ls(p),l,mid); Build(rs(p),mid+1,r); PushUp(p); } }t; void solve() { int opt,x,k; while(m--) { cin>>opt>>x>>k; if(opt==2) t.Change(x,{k}); else cout<>n>>m; for(int i=1;i<=n;++i) cin>>a[i]; t.Build(1,1,n); } int main() { #ifdef OPEN_FILE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif #ifdef OPEN_TIME auto StartTime=clock(); #endif // ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr); int T=1; // cin>>T; // while(cin>>n) { while(T--) { init(); solve(); } #ifdef OPEN_TIME cerr<<"used: "<<(double)(clock()-StartTime)/CLOCKS_PER_SEC*1000<<" ms"<