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次也会变 ...
随机推荐
- 后端Long类型传到前端精度丢失的正确解决方式
原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...
- [Machine Learning] 单变量线性回归(Linear Regression with One Variable) - 线性回归-代价函数-梯度下降法-学习率
单变量线性回归(Linear Regression with One Variable) 什么是线性回归?线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方 ...
- JDK下载地址 Oracle JDK下载 地址 (已解决)
现在JDK开始收费了 Oracle官方对JDK的管理也变得严格了,现在想要在官网下载jdk需要先注册Oracle账号,这倒是小事但是网页反应慢注册填写内容复杂导致很多人不想注册. 不过有的人提供了公开 ...
- Java学习日报8..4
class ArrayUtil{ public static void reverse(int data[]) { int center=data.length/2; int head=0; int ...
- stm32之定时器彻底研究
分类: C/C++ 这里介绍两种方式使用stm32的定时器:直接操作寄存器和使用st的官方的库文件. 相比较而言,直接操作定时器比较简洁,对着寄存器看十分明了.而使用库文件有一点晕头转向. (个人观点 ...
- Linux 如何选择要kill掉的进程
从网上的找了一个比较全面的如下: OOM Killer在内存耗尽时,会查看所有进程,并分别为每个进程计算分数.将信号发送给分数最高的进程. 计算分数的方法 在OOM Killer计算分数时要考虑很 ...
- 伪静态 RewriteRule-htaccess
伪静态实际上是利用PHP把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则 一.正则表达式教程 有一个经典的教程:正则表达式30分钟入门教程 常用正则如下: . 换行符以外的所有 ...
- RHEL8/CentOS8的网络IP配置
rhel8与7的区别 在rhel7上,同时支持network.service和NetworkManager.service(简称NM).默认情况下,这2个服务都有开启,但许多人都会将NM禁用掉. 在r ...
- (解决)easypoi图片导出只占用一个单元格
@ 目录 前提 依赖环境 问题原因 解决方案 重写jar中的方法 原理 前提 本解决方案来源于网络,因解决自己需求,因此自行记录起来,如有侵权请联系我. 依赖环境 easypoi--依赖版本3.1.0 ...
- 深入理解Go Context
目录 emptyCtx类型 cancelCtx类型 timerCtx类型 valueCtx类型 在Go语言并发编程中,用一个goroutine来处理一个任务,而它又会创建多个goroutine来负责不 ...