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 ...
随机推荐
- 为Unity的新版ugui的Prefab生成预览图
using UnityEngine;using System.Collections;using UnityEditor;using System.IO; [CustomPreview(typeof( ...
- Python 连接数据库 day5
import pymysql #连接数据库,port必须是int型,字符编码是utf8,不能是utf-8,password必须是字符串 conn = pymysql.connect(host=', d ...
- javaWEB中web.xml配置文件相关
1.常用节点的执行顺序: context-param -> listenter -> filter -> servlet -> interceptor,其中有多个filter的 ...
- 第七节:numpy之矩阵及特殊矩阵的创建
- 学习Android
=========================================today start to learn Android================= 我们学习需要的软件: jd ...
- 【codeforces 801B】Valued Keys
[题目链接]:http://codeforces.com/contest/801/problem/B [题意] 定义一个对两个字符串x,y的f(x,y)函数; 返回的是一个字符串; 这个返回的字符串的 ...
- zookeeper概念与原理
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. 1 Zookeeper的基本概念 1.1 角色 ...
- HDU 3208 Integer’s Power
Integer’s Power Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...
- Android DynamicGrid:拖曳交换位置
Android DynamicGrid:拖曳交换位置 Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:https://github ...
- 剖析Spark-Shell
打开spark-shell,我们可以看到 function main() { if $cygwin; then stty -icanon min 1 -echo > /dev/null 2> ...