LOJ10128. 花神游历各国
花神喜欢步行游历各国,顺便虐爆各地竞赛。花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家)。
每一次旅行中,花神会选择一条旅游路线,它在那一串国家中是连续的一段,这次旅行带来的开心值是这些国家的喜欢度的总和,当然花神对这些国家的喜欢程序并不是恒定的,有时会突然对某些国家产生反感,使他对这些国家的喜欢度 δ 变为 sqrt (δ)(可能是花神虐爆了那些国家的 OI,从而感到乏味)。
现在给出花神每次的旅行路线,以及开心度的变化,请求出花神每次旅行的开心值。
输入格式
第一行是一个整数 N,表示有 N 个国家;
第二行有 N 个空格隔开的整数,表示每个国家的初始喜欢度 δi;
第三行是一个整数 M,表示有 M 条信息要处理;
第四行到最后,每行三个整数 x,l,r,当 x=1 时询问游历国家 l 到 r 的开心值总和,也就是∑rδi ,当 x=2 时国家 l 到 r 中每个国家的喜欢度δi 变为sqrt(δi) 。
输出格式
每次 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
11
数据范围与提示
对于全部数据,1≤n≤10^5,1≤m≤2×10^5,1≤l≤r≤n,0≤δi≤10^9。
注:建议使用 sqrt 函数,且向下取整。
__________________________________________________________________________
懒惰标记为bool型,标记当前区域是否已经无需开方,也就是是否都是1或0.
bz[cur]=bz[cur<<1] && bz[cur<<1|1]
如果懒惰标记为1,则无需再做修改。
__________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e5+10;
4 typedef long long ll;
5 ll sum[maxn<<2],a[maxn];
6 bool delt[maxn<<2];
7 ll n,m;
8 void build(ll cur,ll l,ll r)
9 {
10 if(l==r)
11 {
12 sum[cur]=a[l];
13 if(sum[cur]==0 || sum[cur]==1)delt[cur]=1;
14 return ;
15 }
16 ll mid=(l+r)>>1;
17 build(cur<<1,l,mid);
18 build(cur<<1|1,mid+1,r);
19 sum[cur]=sum[cur<<1]+sum[cur<<1|1];
20 delt[cur]=delt[cur<<1] && delt[cur<<1|1];
21 }
22 void change(ll cur,ll l,ll r,ll ql,ll qr)
23 {
24 if(delt[cur])return;
25 if(l==r)
26 {
27 sum[cur]=sqrt(sum[cur]);
28 if(sum[cur]==1 || sum[cur]==0)delt[cur]=1;
29 return ;
30 }
31 ll mid=(l+r)>>1;
32 if(ql<=mid)change(cur<<1,l,mid,ql,qr);
33 if(mid<qr)change(cur<<1|1,mid+1,r,ql,qr);
34 sum[cur]=sum[cur<<1]+sum[cur<<1|1];
35 delt[cur]=delt[cur<<1] && delt[cur<<1|1];
36 }
37 ll query(ll cur,ll l,ll r,ll ql,ll qr)
38 {
39 if(ql<=l && r<=qr)return sum[cur];
40 ll ans=0,mid=(l+r)>>1;
41 if(ql<=mid)ans+=query(cur<<1,l,mid,ql,qr);
42 if(mid<qr)ans+=query(cur<<1|1,mid+1,r,ql,qr);
43 return ans;
44 }
45 int main()
46 {
47 scanf("%lld",&n);
48 for(int i=1;i<=n;++i)scanf("%lld",a+i);
49 build(1,1,n);
50 scanf("%lld",&m);
51 for(int op,ql,qr,i=0;i<m;++i)
52 {
53 scanf("%d%d%d",&op,&ql,&qr);
54 if(op==1)printf("%lld\n",query(1,1,n,ql,qr));
55 else change(1,1,n,ql,qr);
56 }
57 return 0;
58 }
LOJ10128. 花神游历各国的更多相关文章
- BZOJ-3211花神游历各国 并查集+树状数组
一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...
- 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 ...
- bzoj3211花神游历各国 线段树
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 4252 Solved: 1547[Submit][Status][Discu ...
- 【BZOJ】【3211】花神游历各国
线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注 ...
- BZOJ3211: 花神游历各国(线段树)
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 5692 Solved: 2114[Submit][Status][Discu ...
- 【BZOJ3211】花神游历各国 并查集+树状数组
[BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 ...
- [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 4057 Solved: 1480[Submit][Status][Discu ...
- BZOJ3211花神游历各国
BZOJ3211花神游历各国 BZOJ luogu 分块 记一个all表示该块是否全部<=1,如果all不为真就暴力修改 因为一个数被开根的次数不多,即使\(10^{12}\)只要开根6次也会变 ...
随机推荐
- easyui中连接按钮样式
方法1. <a href="otherpage.php" class="easyui-linkbutton" data-options="ico ...
- Selenium执行JavaScript脚本
JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在We ...
- 前端JS获取用户位置
精确至城市 (基于腾讯位置服务的IP定位,需申请KEY)
- spring: 我是如何解决循环依赖的?
1.由同事抛的一个问题开始 最近项目组的一个同事遇到了一个问题,问我的意见,一下子引起的我的兴趣,因为这个问题我也是第一次遇到.平时自认为对spring循环依赖问题还是比较了解的,直到遇到这个和后面的 ...
- HTTP 常用状态码200 301 302 403 500
200(OK):成功处理了请求. 301 redirect: 301 代表永久性转移(Permanently Moved) //助记 1 永恒,如果你记住了这一条就算这篇博客没白写.302 redir ...
- 【分布式锁的演化】“超卖场景”,MySQL分布式锁篇
前言 之前的文章中通过电商场景中秒杀的例子和大家分享了单体架构中锁的使用方式,但是现在很多应用系统都是相当庞大的,很多应用系统都是微服务的架构体系,那么在这种跨jvm的场景下,我们又该如何去解决并发. ...
- 强化学习入门基础-马尔可夫决策过程(MDP)
作者:YJLAugus 博客: https://www.cnblogs.com/yjlaugus 项目地址:https://github.com/YJLAugus/Reinforcement-Lear ...
- git基础-远程仓库的使用
远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库. 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以 ...
- NC65在日常开发中常用的代码写法
标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...
- dede织梦技巧:教你彻底解决dede按权重排序的问题(转)
dede排序对网站来说一直存在问题,默认是按照最新发布时间排序.这样排序有个问题,一旦更新之后即被视为最新发布,于是原本做好的排序瞬间就乱了. 这种时候,按权重排序是个很好的选择,但按权重排序到处存在 ...