比赛 |
树形数据结构拔高 |
评测结果 |
AAAAAAAAAA |
题目名称 |
HS造题的七分钟 |
最终得分 |
100 |
用户昵称 |
flyfree |
运行时间 |
1.342 s |
代码语言 |
C++ |
内存使用 |
8.09 MiB |
提交时间 |
2025-04-17 21:23:54 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pir pair<ll,ll>
#define ls first
#define rs second
#define mp make_pair
#define mod
#define MAXN 100010
#define qmod(x) (x>mod?x-mod:x)
// By flyfreemrn
inline ll read(){
ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
ll a[MAXN];
struct node_sgt{
ll l[MAXN*4],r[MAXN*4],sum[MAXN*4];
void push_up(ll now){
sum[now]=sum[now<<1]+sum[now<<1|1];
}
void build(ll lz,ll rz,ll now){
l[now]=lz,r[now]=rz;
if(lz==rz){
sum[now]=a[lz];
return;
}
ll mid=(lz+rz)>>1;
build(lz,mid,now<<1);
build(mid+1,rz,now<<1|1);
push_up(now);
}
void modify(ll lz,ll rz,ll now){
if(l[now]>=lz&&r[now]<=rz){
if(l[now]==r[now]){
sum[now]=sqrt(sum[now]);
return;
}
if(sum[now<<1]>r[now<<1]-l[now<<1]+1)modify(lz,rz,now<<1);
if(sum[now<<1|1]>r[now<<1|1]-l[now<<1|1]+1)modify(lz,rz,now<<1|1);
push_up(now);
return;
}
ll mid=(l[now]+r[now])>>1;
if(lz<=mid&&sum[now<<1]>r[now<<1]-l[now<<1]+1)modify(lz,rz,now<<1);
if(rz>mid&&sum[now<<1|1]>r[now<<1|1]-l[now<<1|1]+1)modify(lz,rz,now<<1|1);
push_up(now);
}
ll query(ll lz,ll rz,ll now){
if(l[now]>=lz&&r[now]<=rz)return sum[now];
ll res=0,mid=(l[now]+r[now])>>1;
if(lz<=mid)res+=query(lz,rz,now<<1);
if(rz>mid)res+=query(lz,rz,now<<1|1);
return res;
}
}sgt;
ll n,m;
int main(){
freopen("hssqrt.in", "r", stdin);
freopen("hssqrt.out", "w", stdout);
n=read();
for(int i=1;i<=n;i++)a[i]=read();
sgt.build(1,n,1);
m=read();
for(int i=1;i<=m;i++){
ll type=read(),l=read(),r=read();
if(l>r)swap(l,r);
if(type)cout<<sgt.query(l,r,1)<<endl;
else sgt.modify(l,r,1);
}
return 0;
}