[bzoj-3211]花神游历各国 题解

该博客介绍了如何利用数据结构线段树来解决一道需要进行区间和查询及取根号操作的算法问题。作者提到,对于根号操作,由于不超过五次即可将大数变为1或0,因此可以暴力求解。在实现过程中,博主选择了线段树而非分块策略,因为据说分块可能导致超时。博客总结了两个关键步骤:建立线段树以及每次操作时暴力维护区间状态。
摘要由CSDN通过智能技术生成

题目传送门
题意解析:题目就是告诉你n个数,然后有m个询问,每次询问有两个操作,一个是把一段区间内的和输出,一个是把一段区间中的每个数取根号。


My opinion:看到这题就应该知道应该用数据结构维护,不过这个根号该怎么办呢?我们都知道,根号让一个数降下来只需要几次就好了,而根号1或者0都不会变的,我算了一下让10^9变成1或0只需要根号5次就好了,所以,我们可以每次暴力根号,如果一段区间已经全部变成了0或1就不需要更改。那么就是剩下用什么数据结构了,当然是线段树或者分块了,然而有dalao跟我说分块超时(我没有试过),所以就直接写线段树了。
总结:
1、建树。
2、每次暴力维护,查询依旧。
对,没了,就这么些。


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=a;i>=n;i--)
#define Clear(a,x) memset(a,x,sizeof(a))
#define ll long long
#define I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值