提交时间:2024-11-10 14:59:51

运行 ID: 34511

#include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair #define ctz __builtin_ctz using namespace std; const int N=2e5+10; int tmp[N]; int a[N];int n,q; struct ask{ int op,l,r; }Q[N]; int calc(int *x,int ln){ int tp=0; sort(x+1,x+ln+1); int ans=0; //for(auto ed:x) cout<<ed<<' '; for(int i=3;i<=ln;i++){ if(x[i-1]+x[i-2]>x[i]) ans=max(ans,x[i]+x[i-1]+x[i-2]); }return ans; }int LM=60; bool cmp(int a,int b){ return a>b; } struct sgt{ void mg(int *a,int *b,int *c){ int i1=1,i2=1; for(int i=1;i<=LM;i++){ if(b[i1]>c[i2]){ a[i]=b[i1];i1++; }else{ a[i]=c[i2];i2++; } } }int T[N<<2+1][71]; #define ls p*2 #define rs p*2+1 #define mid (l+r)/2 void pu(int p){ mg(T[p],T[ls],T[rs]); }void bd(int p,int l,int r){ //cout<<l<<' '<<r<<endl; if(l==r){ T[p][1]=a[l];return ; }bd(ls,l,mid);bd(rs,mid+1,r);pu(p); //cout<<l<<' '<<r<<endl; //cout<<p<<' '; //for(int i=1;i<=LM;i++) cout<<T[p][i]<<' ';cout<<endl; }void upd(int p,int l,int r,int x,int v){ if(l==r){ T[p][1]=v;return ; }if(x<=mid) upd(ls,l,mid,x,v); else upd(rs,mid+1,r,x,v);pu(p); }int A[71];int B[71]; void qry(int p,int l,int r,int pl,int pr){ if(pl<=l&&r<=pr){ for(int i=1;i<=LM;i++) B[i]=A[i]; mg(A,B,T[p]); return ; } if(pl<=mid) qry(ls,l,mid,pl,pr); if(pr>mid) qry(rs,mid+1,r,pl,pr); } }sgt; void slv(){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sgt.bd(1,1,n); for(int i=1;i<=q;i++){ int op,l,r;scanf("%d%d%d",&op,&l,&r); if(op==0){ sgt.upd(1,1,n,l,r); }else{ memset(sgt.A,0,sizeof(sgt.A));sgt.qry(1,1,n,l,r); printf("%d\n",calc(sgt.A,LM)); } } } int main(){ slv(); return 0; }