Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
44600 alex_liu 数列操作3 C++ 编译错误 0 0 MS 0 KB 1602 2022-02-09 11:07:02

Tests(0/0):


#include<bits/stdc++.h> #define int long long #define ls k<<1 #define rs k<<1|1 using namespace std; const int maxn=1000005; int a[maxn],maxx[maxn<<2],sum[maxn<<2],n,m; inline int read(){ int x=0,w=1; char ch=getchar(); for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1; for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; return x*w; } inline void up(int k){ maxx[k]=max(maxx[ls],maxx[rs]); sum[k]=sum[ls]+sum[rs]; } inline void build(int k,int l,int r){ if(l==r){ sum[k]=maxx[k]=a[l]; return; } int mid=(l+r)>>1; build(ls,l,mid); build(rs,mid+1,r); up(k); } inline void change(int k,int l,int r,int L,int R){ if(l==r&&l>=L&&r<=R){ sum[k]=maxx[k]=sqrt(sum[k]); return ; } int mid=(l+r)>>1; if(L<=mid && maxx[ls]>1) change(ls,l,mid,L,R); if(mid<R && maxx[rs]>1) change(rs,mid+1,r,L,R); up(k); } inline int query(int k,int l,int r,int L,int R){ if(L<=l && r<=R) return sum[k]; int mid=(l+r)>>1; int ans=0; if(L<=mid) ans+=query(ls,l,mid,L,R); if(mid<R) ans+=query(rs,mid+1,r,L,R); return ans; } signed main(){ n=read(); memset(sum,0,sizeof(sum)); memset(maxx,0,sizeof(maxx)); for(int i=1;i<=n;i++)a[i]=read(); build(1,1,n); for(int i=1;i<=n;i++){ int op=read(),l=read(),r=read(); if(l>r)swap(l,r); if(op==0)change(1,1,n,l,r); else cout<<query(1,1,n,l,r)<<endl; } cout<<endl; return 0; }


测评信息: