bzoj3211: 花神游历各国(线段树) 同codevs2492
3211: 花神游历各国
Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 3628  Solved: 1326
[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
/*
线段树区间开根,区间求和
以为一个一个开根很耗时间,所以要优化
想到一个数开几次根就到一了,所以用个flag记录当前是否是0或1
是的话就 return 快很多。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> #define N 100010
#define ll long long using namespace std;
ll n,m,ans;
struct tree
{
ll l,r,sum;
bool flag;
}tr[N<<]; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} inline void pushup(ll k)
{
tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
tr[k].flag=tr[k<<].flag&tr[k<<|].flag;
} void build(ll k,ll l,ll r)
{
tr[k].l=l;tr[k].r=r;tr[k].sum=;
if(l==r)
{
tr[k].sum=read();
if(tr[k].sum== || tr[k].sum==) tr[k].flag=;
return;
}
ll mid=(tr[k].r+tr[k].l)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
pushup(k);
} void change(ll k,ll l,ll r)
{
if(tr[k].flag) return;
if(tr[k].l==tr[k].r)
{
tr[k].sum=(ll) sqrt(tr[k].sum);
if(tr[k].sum== || tr[k].sum==) tr[k].flag=;
return;
}
ll mid=(tr[k].l+tr[k].r)>>;
if(r<=mid) change(k<<,l,r);
else if(l>mid) change(k<<|,l,r);
else change(k<<,l,mid),change(k<<|,mid+,r);
pushup(k);
} ll query(ll k,ll l,ll r)
{
if(tr[k].l==l && tr[k].r==r)
return tr[k].sum;
pushup(k);
ll mid=(tr[k].r+tr[k].l)>>;
if(r<=mid) return query(k<<,l,r);
else if(l>mid) return query(k<<|,l,r);
else return query(k<<,l,mid)+query(k<<|,mid+,r);
} int main()
{
long long x,y,z;
n=read();build(,,n);
m=read();
while(m--)
{
x=read();y=read();z=read();
if(y>z) swap(y,z);
if(x==) printf("%lld\n",query(,y,z));
else change(,y,z);
}
return ;
}
bzoj3211: 花神游历各国(线段树) 同codevs2492的更多相关文章
- bzoj3211 花神游历各国 线段树,势能分析
		
[bzoj3211]花神游历各国 2014年3月17日2,7230 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...
 - bzoj3211花神游历各国 线段树
		
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 4252 Solved: 1547[Submit][Status][Discu ...
 - BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)
		
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:BZOJ HDU 原题目描述在最下面. 两种操作,1:把区间的数字开方一次,2:区间求和. 思路: 线段树: 显然不能暴力 ...
 - 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 ...
 - BZOJ 3211: 花神游历各国( 线段树 )
		
线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...
 - GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)
		
GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...
 - BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
		
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...
 - luogu 4145 花神游历各国 线段树/树状数组+并查集
		
此题一看便是RMQ问题,但是由于开平方的特殊操作,tag操作失效 此时发现特性:sqrt最多执行6此便使值到达1/0,此时可以剪枝不进行该操作,利用并查集到达特性找根,根代表还可以进行操作的点,再利用 ...
 - 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 ...
 
随机推荐
- Mysql 之主从复制,mysql-proxy读写分离
			
准备两台mysql服务器,master(192.168.43.64).slave(192.168.84.129) master配置: log-bin=mysql-bin binlog_format=m ...
 - css的基础知识1
			
总结:css引用:1内联:在标签中加style属性,<标签名 style="样式1:样式值1:样式2:样式值2"> </标签名>.2.内嵌:在head标签中 ...
 - Labview学习笔记(三)
			
一.数据 1.数值控件 (1)数值控件 根据不同的模拟状态,放置不同控件 (2)显示格式 为了程序显示,需要设置数值型控件的表示法.数值范围.显示格式等属性. 一般来说,长度越长,则可以表示的数值范围 ...
 - [系统资源攻略]CPU
			
linux系统中如何查看cpu信息? 查看linux版本.cpu.位数.内核.内存等信息 linux下查看CPU,内存,机器型号,网卡等信息的方法 查看服务器物理CPU数和CPU核数方法介绍 可以用/ ...
 - .net 学习视频
			
http://www.iqiyi.com/a_19rrh9jx9p.html http://www.cnblogs.com/aarond/p/SQLDispatcher.html --读写分离 ht ...
 - display: table-cell; 自适应布局
			
#extras {display: table-cell;width: 180px;padding-left: 10px;border-right: 1px dotted #d7ad7b;} tabl ...
 - 非递归全排列 python实现
			
python algorithm 全排列(Permutation) 排列(英语:Permutation)是将相异物件或符号根据确定的顺序重排.每个顺序都称作一个排列.例如,从一到六的数字有720种排列 ...
 - 00.continue break return的使用场景
			
continue continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环. continue语句用在w ...
 - 【[Offer收割]编程练习赛13 B】最大子矩阵(自己的思路)
			
[题目链接]:http://hihocoder.com/contest/offers13/problem/2 [题意] [题解] 算出1..250*250这些数字每个数字的所有因子(成对的那种,即x* ...
 - noip模拟赛 fateice-shop
			
题目背景 紫女,韩国歌舞坊(实为刺客组织)紫兰轩之主,千娇百媚,美艳无方.武艺高强且极有谋略胆识,精通奇石药物,冶炼之术及制毒用毒之术独步天下,真实姓名与来历无人知晓,只因总是身着一袭紫衣,所以众人以 ...