提交时间:2024-11-10 21:30:54
运行 ID: 34579
#include<bits/stdc++.h> #define ll long long #define lson pos<<1 #define rson pos<<1|1 using namespace std; const int maxn=2e5+10; const ll mod=1e9+7; const ll inf=1e10; ll n,m,k,t,ans=0; ll a[maxn],b[maxn],mut[maxn][20],C[20][20],dp[maxn][20],vis[maxn]; char c[maxn],s[maxn]; struct node{ int opt,l,r; }q[maxn]; int get_log(int x){ int tmp=-1; while(x){ tmp++; x>>=1; } return tmp; } int q_pow(int a,int b){ int tmp=1; while(b){ if(b&1){ tmp=(tmp*a); } b>>=1; a=a*a; } return tmp; } int main(){ // freopen("triangle.in","r",stdin); // freopen("triangle.out","w",stdout); scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } if(n<=3000&&m<=3000){ while(m--){ int opt,l,r; scanf("%d%d%d",&opt,&l,&r); if(opt){ int tot=0; for(int i=l;i<=r;i++){ b[++tot]=a[i]; } sort(b+1,b+1+tot); for(int i=tot;i>=3;i--){ if(b[i-1]+b[i-2]>b[i]){ printf("%lld\n",b[i-2]+b[i-1]+b[i]); break; } if(i==3) printf("0\n"); } if(tot<3) printf("0\n"); } else{ a[l]=r; } } fclose(stdin); fclose(stdout); return 0; } bool fg=0; for(int i=m;i>=1;i--){ scanf("%d%d%d",&q[i].opt,&q[i].l,&q[i].r); if(q[i].opt) fg=1; } if(!fg){ } else{ while(m){ //cout<<m<<endl; int opt=q[m].opt,l=q[m].l,r=q[m].r; if(!opt){ a[l]=r; } else{ for(int i=0;i<=30;i++) b[i]=0; for(int i=l;i<=r;i++){ // cout<<l<<" "<<r<<" "<<a[i]<<" "<<get_log(a[i])<<endl; b[get_log(a[i])]++; } for(int i=30;i>=0;i--){ if(b[i]>=3){ printf("%d\n",3*q_pow(2,i)); break; } if(b[i]>=2&&i>0){ ll tmp=-1; for(int j=i-1;j>=0;j--){ if(b[j]){ tmp=j; break; } } if(tmp>-1){ printf("%d\n",q_pow(2,i+1)+q_pow(2,tmp)); break; } } if(!i) printf("0\n"); } } m--; } fclose(stdin); fclose(stdout); return 0; } fclose(stdin); fclose(stdout); return 0; }