Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34504 武云帆 【S】T2 C++ 运行出错 15 3085 MS 225568 KB 3186 2024-11-10 14:38:44

Tests(3/20):


#include<bits/stdc++.h> #define ls(i) (i<<1) #define rs(i) (i<<1|1) using namespace std; const int N=200010; int a[N],p[N][30],c[N]; int t[N*4][30]; int n,q; void push_up(int u){ for(int i=0;i<=29;i++) t[u][i]=t[ls(u)][i]+t[rs(u)][i]; } void build(int u,int l,int r){ if(l==r){ int p=a[l]; int k1=0; while(p!=0){ k1++; p/=2; } t[u][k1-1]=1; c[l]=k1-1; return; } int mid=(l+r)>>1; build(ls(u),l,mid); build(rs(u),mid+1,r); push_up(u); } void remove(int u,int l,int r,int x,int v){ if(l==r){ t[u][c[l]]=0; t[u][v]=1; c[l]=v; return; } int mid=(l+r)>>1; if(mid>=x) remove(ls(u),l,mid,x,v); if(mid<x) remove(rs(u),mid+1,r,x,v); push_up(u); } void find(int u,int l,int r,int x){ if(r<=x){ for(int i=0;i<=29;i++) p[x][i]+=t[u][i]; return ; } int mid=(l+r)>>1; find(ls(u),l,mid,x); if(mid<x) find(rs(u),mid+1,r,x); } int main(){ cin>>n>>q; for(int i=1;i<=n;i++) cin>>a[i]; if(n>400) build(1,1,n); while(q--){ int op; cin>>op; if(op){ int x,y; cin>>x>>y; if(n>400) { int ans=0; for(int i=0;i<=29;i++){ p[x-1][i]=p[y][i]=0; } find(1,1,n,x-1); find(1,1,n,y); for(int i=29;i>=0;i--){ if(p[y][i]-p[x-1][i]>=3){ //cout<<(1<<(i))*3<<" "<<i<<endl; ans=max(ans,(1<<(i))*3); //break; } else if(p[y][i]-p[x-1][i]==2){ for(int j=i-1;j>=0;j--){ if(p[y][j]-p[x-1][j]>=1){ ans=max(ans,(1<<(i))*2+(1<<(j))); //break; } } } } cout<<ans<<'\n'; } else{ int ans=0; //cout<<"?"; for(int i=x;i<=y;i++){ for(int j=i+1;j<=y;j++){ for(int k=j+1;k<=y;k++){ if(a[i]+a[j]>a[k]&&a[i]+a[k]>a[j]&&a[j]+a[k]>a[i]&&abs(a[i]-a[j])<a[k]&&abs(a[i]-a[k])<a[j]&&abs(a[j]-a[k])<a[i]){ ans=max(ans,a[i]+a[k]+a[j]); //cout<<i<<" "<<j<<" "<<k<<endl; } //cout<<"!"; } } } cout<<ans<<'\n'; } } else{ int x,y; cin>>x>>y; if(n>400){ int k1=0; a[x]=y; while(y!=0){ y/=2; k1++; } remove(1,1,n,x,k1-1); } else a[x]=y; } } }


测评信息: