3211: 花神游历各国

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 4252  Solved: 1547
[Submit][Status][Discuss]

Description


Input


Output

每次x=1时,每行一个整数,表示这次旅行的开心度

Sample Input

4
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4

Sample Output

101
11
11

HINT

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9

可以注意到题目中给出的最大数1e9,在开根几次之后都变成了0或1,0或1开根后不变
也就是说对于每个位置,修改操作次数是有限的,修改次数达到上限以后就不用修改了

开lazy标记当前区间是否开根开到全是0或1,sum表示区间和
考虑到修改不超过10次,我们每次修改都深入到最底层节点暴力修改再传给父亲信息即可
当一个节点的儿子全被lazy标记,它也可以打上lazy标记

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
#define N 100005
using namespace std;
int n,m,a[N],lz[N<<2];ll sum[N<<2];
void pushup(int u){
int l=u<<1,r=l|1;
sum[u]=sum[l]+sum[r];
lz[u]=lz[l]&lz[r];
}
void build(int u,int l,int r){
if(l==r){
sum[u]=a[l];
if(sum[u]<=1)lz[u]=1;
return;
}
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void update(int u,int L,int R,int l,int r){
if(lz[u])return;
if(L==R){
sum[u]=sqrt(sum[u]);
if(sum[u]<=1)lz[u]=1;
return;
}
int mid=L+R>>1;
if(l<=mid)update(u<<1,L,mid,l,r);
if(r>mid)update(u<<1|1,mid+1,R,l,r);
pushup(u);
}
ll query(int u,int L,int R,int l,int r){
if(l<=L&&R<=r)return sum[u];
int mid=L+R>>1;
ll t=0;
if(l<=mid)t+=query(u<<1,L,mid,l,r);
if(r>mid)t+=query(u<<1|1,mid+1,R,l,r);
return t;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
scanf("%d",&m);
while(m--){
int op,l,r;
scanf("%d%d%d",&op,&l,&r);
if(l>r)swap(l,r);
if(op==1)printf("%lld\n",query(1,1,n,l,r));
else update(1,1,n,l,r);
}
return 0;
}

bzoj3211花神游历各国 线段树的更多相关文章

  1. bzoj3211: 花神游历各国(线段树) 同codevs2492

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 1326[Submit][Status][Discu ...

  2. bzoj3211 花神游历各国 线段树,势能分析

    [bzoj3211]花神游历各国 2014年3月17日2,7230 Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...

  3. BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:BZOJ HDU  原题目描述在最下面.  两种操作,1:把区间的数字开方一次,2:区间求和. 思路: 线段树:  显然不能暴力 ...

  4. BZOJ3211:花神游历各国(线段树)

    Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 ...

  5. BZOJ 3211: 花神游历各国( 线段树 )

    线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...

  6. GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)

    GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...

  7. BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)

    题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...

  8. luogu 4145 花神游历各国 线段树/树状数组+并查集

    此题一看便是RMQ问题,但是由于开平方的特殊操作,tag操作失效 此时发现特性:sqrt最多执行6此便使值到达1/0,此时可以剪枝不进行该操作,利用并查集到达特性找根,根代表还可以进行操作的点,再利用 ...

  9. BZOJ3211 花神游历各国 【树状数组 + 并查集】

    题目 输入格式 输出格式 每次x=1时,每行一个整数,表示这次旅行的开心度 输入样例 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 输出样例 101 11 1 ...

随机推荐

  1. Filter 和 interceptor 的区别

    1. 拦截器 interceptor ● 特点:interceptor 依赖于web框架,在Spring<MV中就是依赖于springMVC框架.在实现上是基于Java的反射机制,属于面向切面编 ...

  2. Java 持久化之 --io流与序列化操作

    1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...

  3. 新概念英语(1-115)Knock! Knock!

    Lesson 115 Knock, knock! 敲敲门! Listen to the tape then answer this question. What does Jim have to dr ...

  4. 新概念英语(1-121)The man in a hat

    Why didn't Caroline recognize the customer straight away ?A:I bought two expensive dictionaries here ...

  5. 记一次将公司网站http换成https

    看了博客园将近一年了,一直都只是在被动的看,总觉得应该写点什么,但是又不知道该写点什么.今天正好公司要把网站由http换成https,那我就顺便记录一下吧. 由于之前没有弄过,所以就面向百度编程. 首 ...

  6. vue computed 原理

    vue computed 主要依靠数据依赖来更新,这里不展示computed源代码,只展示核心思想. computed: { a(){ return this.b ++ } } data:{ b: 1 ...

  7. 理解Node.js安装及模块化

    1.安装Node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.j ...

  8. python基础(常用内容)

    python基础(常用内容) 机器数: 一个数在计算机中的二进制表示形式就是机器数. 例如: +3用机器数表示就用<00000011>表示 -3用机器数表示就用<10000011&g ...

  9. python JavaScript

    JavaScript 一. JavaScript Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的. a. JavaScript的引入方式 1 2 3 4 5 6 7 #直接编写 ...

  10. hdu1050 Moving Tables---贪心

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1050 题目大意:就说有一些桌子需要从某些房间搬到另一些房间,但中间只有一条走廊,且走廊中任何一段只能 ...