比赛 树形数据结构拔高 评测结果 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;
}