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次也会变 ...
随机推荐
- docker 使用笔记
docker 使用笔记 1. 与宿主机之间拷贝文件 docker cp test.html 99f952ac05e6cd879f14aa6c9d0db02aaf498634edc4f6cdc9953c ...
- 用anaconda的pip安装第三方python包
启动anaconda命令窗口: 开始> 所有程序> anaconda> anaconda prompt会得到两行提示: Deactivating environment " ...
- [leetcode]62.UniquePaths
/** * Created by lvhao on 2017/7/6. * A robot is located at the top-left corner of a m x n grid (mar ...
- java.util.Collections
p.p1 { margin: 0; font: 11px Monaco } span.s1 { text-decoration: underline } span.s2 { color: rgba(1 ...
- Redis+LUA整合使用
.前言 从本章节开始我们就开始讲解一些 Redis 的扩展应用了,之前讲的主从.哨兵和集群都相当重要,也许小公司用不到集群这么复杂的架构,但是也要了解各知识点的原理,只要了解了原理,无论什么时候是有, ...
- CentOS 7 最小化安装及优化
CentOS 7 最小化安装及优化 目录 CentOS 7 最小化安装及优化 一.下载镜像文件 官方网站 国内镜像源 一.VMware 配置虚拟网络 二.VMware 新建虚拟机 三.CentOS 7 ...
- String StringBuffer StringBuilder之间的区别
String:
- Head First 设计模式 —— 07. 适配器模式
思考题 你能想到真实世界中,还有哪些适配器的例子? P236 HDMI 转 VGA 转换器 Type-C 转 3.5mm 线 适配器模式解析 客户使用适配器的过程: P241 客户通过目标接口调用适配 ...
- JVM 源码分析(二):搭建 JDK 8 源码调试环境(Windows 上使用 CLion)
前言 一.准备源码 二.安装 "Bootstrap JDK" 三.配置编译环境 四.编译与测试 五.安装 CMake 和 GDB 五.准备远程调试 六.开始远程调试 前言 上一篇文 ...
- 基于nginx实现web服务器的双机热备
1.适用场景 对于部署重要的服务,会使用两台服务器,互相备份,共同执行同一服务.当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务.双机热 ...