线段树+暴力区修 P4145 上帝造题的七分钟 2 / 花神游历各国

传送门https://www.luogu.com.cn/problem/P4145

这道题着实想了好久,本来想的是用数学方法找规律,结果写了好久,发现想假了,于是只好看思路,暴力区修!原因是被开根号一定次数就会变成1,是有限的,所以可以暴力区间修改,但是要优化一下,这里直接贴代码。

cpp 复制代码
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5+10;
#define int long long
#define lc u<<1
#define rc u<<1|1
int n,m;
int a[N];
#define endl '\n'
struct Tree{
	int l,r;
	int sum,mx;
}tr[N*4];

void pushup(int u){
	tr[u].sum=tr[lc].sum+tr[rc].sum;
	tr[u].mx=max(tr[lc].mx,tr[rc].mx);
}

void build(int u,int l,int r){
	tr[u]={l,r,a[l],a[l]};
	if(l==r) return;
	int m=(l+r)>>1;
	build(lc,l,m);
	build(rc,m+1,r);
	pushup(u);
}

void update(int u,int l,int r){
	if(tr[u].mx==1) return;//优化1  如果最大值已经是1了说明没得开根,直接返回
	if(tr[u].l==tr[u].r){//优化2,直接在遍历的过程中直接拿了
		tr[u].sum=sqrt(tr[u].sum);
		tr[u].mx=sqrt(tr[u].mx);
		return;
	}
	int m=(tr[u].l+tr[u].r)>>1;
	if(l<=m) update(lc,l,r);
	if(r>m) update(rc,l,r);
	pushup(u);
}

int query(int u,int l,int r){
	if(l<=tr[u].l&&tr[u].r<=r){
		return tr[u].sum;
	}
	int m=(tr[u].l+tr[u].r)>>1;
	int num=0;
	if(l<=m) num+=query(lc,l,r);
	if(r>m) num+=query(rc,l,r);
	return num;
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;++i) cin>>a[i];
	build(1,1,n);
	cin>>m;
	//cout<<endl;
	//cout<<tr[1].ans<<endl;
	//cout<<endl;
	while(m--){
		int op,x,y;cin>>op>>x>>y;
		if(x>y) swap(x,y);
		if(op==0){
				update(1,x,y);
		}
		else{
			cout<<query(1,x,y)<<endl;
		}
	}
	//cout<<endl;
	//cout<<tr[1].ans<<endl;
	//for(int i=1;i<=n;++i) cout<<tr[1].ans<<endl;
	return 0;
}
相关推荐
Yhame.8 分钟前
【使用层次序列构建二叉树(数据结构C)】
c语言·开发语言·数据结构
雾月5532 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
Pasregret1 小时前
访问者模式:分离数据结构与操作的设计模式
数据结构·设计模式·访问者模式
知来者逆2 小时前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
阿让啊2 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
এ᭄画画的北北2 小时前
力扣-160.相交链表
算法·leetcode·链表
草莓啵啵~3 小时前
搜索二叉树-key的搜索模型
数据结构·c++
爱研究的小陈3 小时前
Day 3:数学基础回顾——线性代数与概率论在AI中的核心作用
算法
渭雨轻尘_学习计算机ing3 小时前
二叉树的最大宽度计算
算法·面试
丶Darling.4 小时前
26考研 | 王道 | 数据结构 | 第八章 排序
数据结构·考研·排序算法