【BZOJ】【3211】花神游历各国
线段树/暴力
线段树区间开方
唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况……
好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注意到权值的范围是$10^9$,我们随手打个表可以发现,对$10^9$不断开根的结果是:1000000000,31622,177,13,3,1。也就是说,每个数,它开根的次数并没有多少(联想一下CF 250的那道区间取模的题!)所以我们维护一个区间最大值,每次暴力对每个数开根就可以了(如果区间最大值为0或1就可以跳过咯)
/**************************************************************
Problem: 3211
User: Tunix
Language: C++
Result: Accepted
Time:1276 ms
Memory:6364 kb
****************************************************************/ //BZOJ 3211
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
inline int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=1e5+,INF=~0u>>;
typedef long long LL;
/******************tamplate*********************/ int n,m,a[N],mx[N<<];
LL sm[N<<];
#define L (o<<1)
#define R (o<<1|1)
#define mid (l+r>>1)
void maintain(int o){
mx[o]=max(mx[L],mx[R]);
sm[o]=sm[L]+sm[R];
}
void build(int o,int l,int r){
if (l==r){mx[o]=sm[o]=a[l];}
else{
build(L,l,mid);
build(R,mid+,r);
maintain(o);
}
}
void update(int o,int l,int r,int ql,int qr){
if (mx[o]== || mx[o]==) return;
if (l==r){mx[o]=sm[o]=sqrt(mx[o]);}
else{
if (ql<=mid) update(L,l,mid,ql,qr);
if (qr>mid) update(R,mid+,r,ql,qr);
maintain(o);
}
}
LL ans;
void query(int o,int l,int r,int ql,int qr){
if (ql<=l && qr>=r) ans+=sm[o];
else{
if (ql<=mid) query(L,l,mid,ql,qr);
if (qr>mid) query(R,mid+,r,ql,qr);
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("3211.in","r",stdin);
freopen("3211.out","w",stdout);
#endif
n=getint();
F(i,,n) a[i]=getint();
build(,,n);
m=getint();
F(i,,m){
int cmd=getint(),l=getint(),r=getint();
if (cmd==){
ans=;
query(,,n,l,r);
printf("%lld\n",ans);
}else update(,,n,l,r);
}
return ;
}
3211: 花神游历各国
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 1327 Solved: 511
[Submit][Status][Discuss]
Description
Input

Output
每次x=1时,每行一个整数,表示这次旅行的开心度
Sample Input
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4
Sample Output
11
11
HINT
对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9
Source
【BZOJ】【3211】花神游历各国的更多相关文章
- BZOJ 3211: 花神游历各国( 线段树 )
线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...
- BZOJ 3211: 花神游历各国【线段树区间开方问题】
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3514 Solved: 1306[Submit][Status][Discu ...
- BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...
- Codeforces 920F. SUM and REPLACE / bzoj 3211 花神游历各国
题目大意: 一个数列 支持两种操作 1 把区间内的数变成他们自己的约数个数 2 求区间和 思路: 可以想到每个数最终都会变成2或1 然后我们可以线段树 修改的时候记录一下每段有没有全被修改成1或2 是 ...
- BZOJ 3211 花神游历各国 线段树平方开根
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3211 题目大意: 思路: 由于数据范围只有1e9,一个数字x开根号次数超过logx之后 ...
- bzoj 3211: 花神游历各国
#include<cstdio> #include<cmath> #include<iostream> #define M 100006 using namespa ...
- BZOJ 3211 花神游历各国 (树状数组+并查集)
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字 ...
- 【BZOJ】3211: 花神游历各国
题意 \(n\)个点,第\(i\)个点值为\(a_i\).\(m\)个询问,每次询问\([l, r]\)内的和或者将\([l, r]\)的每个值改为自己的算术平方根.(\(n \le 100000, ...
- 【BZOJ】3038: 上帝造题的七分钟2 && 3211: 花神游历各国
[算法]线段树||树状数组&&并查集 [题解]修改必须暴力单点修改,然后利用标记区间查询. 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值. 修改时访问到的子树最大值< ...
随机推荐
- 神仙数据结构——FHQ_Treap
$FHQ\_Treap$是平衡树的一种,它不仅支持几乎所有的平衡树的操作,而且实现特别简单,总共只有两个操作.这里来简单介绍一下. 基本操作 $FHQ\_Treap$和$Treap$一样是需要用随机值 ...
- linux timer operate
1.gettimeofday() ----> http://www.linuxidc.com/Linux/2012-06/61903.htm (一般)
- rabbitmq学习(八) —— 可靠机制上的“可靠”
接着上一篇,既然已经有了手动ack.confirm机制.return机制,还不够吗? 以下博文转自https://www.jianshu.com/p/6579e48d18ae和https://my.o ...
- java中的PO,VO,TO,BO,DAO,POJO的解释
java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...
- hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)
题意: 给一个n*m的矩阵作为地图,0为通路,1为阻碍.只能向上下左右四个方向走.每一年会在一个通路上长出一个阻碍,求第几年最上面一行与最下面一行会被隔开. 输入: 首行一个整数t,表示共有t组数据. ...
- 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)
#include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...
- spring boot学习总结(一)-- 基础入门 Hello,spring boot!
写在最前 SpringBoot是伴随着Spring4.0诞生的: 从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架: SpringBoot帮助开发者快速启动 ...
- Gym 100646 You’ll be Working on the Railroad dfs
You'll be Working on the Railroad 题目连接: http://codeforces.com/gym/100646/attachments Description Con ...
- 应用通信-方案一:RestTemplate
@RestController public class ClientController { @Autowired private LoadBalancerClient loadBalancerCl ...
- 从客户端浏览器直传文件到Storage
关于上传文件到Azure Storage没有什么可讲的,不论我们使用哪种平台.语言,上传流程都如下图所示: 从上图我们可以了解到从客户端上传文件到Storage,是需要先将文件上传到应用服务上,然后再 ...