luogu4145 上帝造题的七分钟2 (线段树)
题意:给一个数列,维护两个操作,区间开根号、询问区间和
注意到1e12开根号六次后就变成1,而且根号1等于1
也就是说,就算我们用单点修改,只要跳过1,那么修改的次数最多也就是6n
那么维护一个区间最大值,如果最大值<=1就直接跳过这个区间,剩下的单点修改即可
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long int
using namespace std;
const int maxn=; inline LL rd(){
LL x=;char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
} LL ma[maxn*],sum[maxn*],num[maxn];
int N,M,ch[maxn*][],cnt,root; inline void update(int p){
sum[p]=sum[ch[p][]]+sum[ch[p][]];
ma[p]=max(ma[ch[p][]],ma[ch[p][]]);
} int build(int l,int r){
int p=++cnt;
if(l==r) sum[p]=ma[p]=num[l];
else{
int m=l+r>>;
ch[p][]=build(l,m);ch[p][]=build(m+,r);
update(p);
}return p;
} void change(int p,int l,int r,int x,int y){
if(ma[p]<=) return;
if(l==r) sum[p]=ma[p]=sqrt(sum[p]);
else{
int m=l+r>>;
if(x<=m) change(ch[p][],l,m,x,y);
if(y>m) change(ch[p][],m+,r,x,y);
update(p);
}
} LL query(int p,int l,int r,int x,int y){
if(x<=l&&r<=y) return sum[p];
else{
int m=l+r>>;LL re=;
if(x<=m) re+=query(ch[p][],l,m,x,y);
if(y>m) re+=query(ch[p][],m+,r,x,y);
return re;
}
} int main(){
int i,j;
N=rd();for(i=;i<=N;i++) num[i]=rd();
root=build(,N);M=rd();
for(i=;i<=M;i++){
int k=rd(),l=rd(),r=rd();if(l>r) swap(l,r);
if(!k) change(root,,N,l,r);
else printf("%lld\n",query(root,,N,l,r));
} }
luogu4145 上帝造题的七分钟2 (线段树)的更多相关文章
- BZOJ_3038_上帝造题的七分钟2_线段树
BZOJ_3038_上帝造题的七分钟2_线段树 题意: XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分 ...
- Bzoj3038 上帝造题的七分钟2 线段树
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1135 Solved: 509 Description XLk觉得<上帝造题的七分钟>不太 ...
- B3038 上帝造题的七分钟2 线段树
这就是一道变得比较奇怪的线段树,维护每个区间的最大值和区间和,然后关键在于每次取根号的话数值下降的特别快,不用几次就都是1了,所以每次暴力单点修改,然后直接找区间最大值,假如区间最大值是1的话,就直接 ...
- Codevs 2492 上帝造题的七分钟 2(线段树)
时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. " ...
- bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1066 Solved: 476[Submit][Status][Dis ...
- 【BZOJ3038】上帝造题的七分钟2 线段树
根据一个数六次√必死,我们可以打标记死了就不管他了,于是有贡献的操作复杂度为O(n*logn*6),然而我们还有由于盲目修改造成的多余代价我们把每次查询的区间分成三部分前全死,中残,后全死,对于中残, ...
- GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)
GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...
- tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树
P1716 - 上帝造题的七分钟 From Riatre Normal (OI)总时限:50s 内存限制:128MB 代码长度限制:64KB 背景 Background 裸体就意味着 ...
- P4514 上帝造题的七分钟——二维树状数组
P4514 上帝造题的七分钟 求的是矩阵里所有数的和: 维护四个树状数组: #include<cstdio> #include<cstring> #include<alg ...
随机推荐
- Docker常规防止容器自动退出
[root@server-crm /]# docker attach songheng [root@fc0a891e1861 /]# cat /bin/auto_service.sh #!/bin/s ...
- Zabbix appliance manual
https://www.zabbix.com/documentation/4.0/manual/appliance If the appliance fails to start up in Hype ...
- PHP单元测试PHPUnit
配置说明 1.全局安装phpunit命令脚本 1 2 3 4 5 $ wget https://phar.phpunit.de/phpunit-7.0.phar $ chmod +x phpunit- ...
- Oracle 同义词(Synonym)
同义词(Synonym)是表.索引.视图等模式对象的一个别名.通过模式对象创建同义词,可以隐藏对象的实际名称和所有者信息,隐藏分布式数据库中远程对象的设置信息,由此为对象提提供一定的安全性保证.同义词 ...
- Azure系列2.1.8 —— BlockEntry
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- 阿里巴巴 Java开发手册1.4.0
<阿里巴巴Java开发手册1.4.0>下载地址: 下载地址:https://102.alibaba.com/downloadFile.do?file=1528269849853/Java_ ...
- Redis五大数据类型
首先说明下,Redis是:单线程+多路IO复用技术!!! string set > key + zset list hash 常用的几个命令: >keys * 查 ...
- 引入kaptcha实现验证码验证
1.导入jar包, 可以选择去 https://mvnrepository.com 里面搜索,也可以直接复制下面的代码 2.复制到maven配置文件pom.xml中并保存 <dependency ...
- drf实现图片验证码功能
一.背景 在之前实现过django的图片验证码,有自己实现过的,也有基于django-simple-captcha的,都是基于form表单验证,若自己实现,可以获取相应的标签name便可以获取判断,若 ...
- LeetCode & Online Programming Learning Platform
leetcode LeetCode is the best platform to help you enhance your skills, expand your knowledge and pr ...