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