区间修改+区间查询(线段树板子题)

另外因为1e9内的数开5次根号必定为1或0,所以我们可以提前打表i<=sqrt[1e9], s[i]=sqrt(i)。这样每次改值不必再调用系统的sqrt;

另外这个题有两个坑点,m<=200000,n<=100000,用cout会爆t,还有HYSBZ是Ubuntu评测要把I64d改成lld......(我调了一晚上发现是Ubuntu的评测机的时候....)

题目链接:

https://www.lydsy.com/JudgeOnline/problem.php?id=3211

打码:

#include <iostream>
#include<stdio.h>
#include<cmath>
#define ll long long
using namespace std;
const int maxn=1e5+70;
int n,m,tt,t1,t2,t3,a[maxn],add[maxn<<2],s[maxn];
ll sum[maxn<<2];
void up(int rt)
{
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
add[rt]=add[rt<<1]&&add[rt<<1|1];
}
void build(int l,int r,int rt)
{
if(l==r){
sum[rt]=a[l];
return;
}
int m=(l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
up(rt);
}
void update(int L,int R,int l,int r,int rt)
{
if(l==r){
if(sum[rt]>tt)
sum[rt]=sqrt(sum[rt]);
else
sum[rt]=s[sum[rt]];
if(sum[rt]<=1)add[rt]=1;
return;
}
int m=(l+r)>>1;
if(L<=m&&add[rt<<1]==0)update(L,R,l,m,rt<<1);
if(R>m&&add[rt<<1|1]==0)update(L,R,m+1,r,rt<<1|1);
up(rt);
}
ll query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R){
return sum[rt];
}
int m=(l+r)>>1;
ll ans=0;
if(L<=m){
ans+=query(L,R,l,m,rt<<1);
}
if(m<R){
ans+=query(L,R,m+1,r,rt<<1|1);
}
return ans;
}
int main()
{
tt=sqrt(1000000000);
for(int i=0;i<=tt;i++){
s[i]=sqrt(i);
}
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build(1,n,1);
scanf("%d",&m);
for(int j=0;j<m;j++){
scanf("%d%d%d",&t1,&t2,&t3);
if(t1==1)
printf("%lld\n",query(t2,t3,1,n,1));
else if(t1==2)
update(t2,t3,1,n,1);
}
return 0;
}

最新文章

  1. MongoDB性能优化
  2. 获取程序的SHA1值
  3. js DOM Document类型
  4. 用vector容器代替数组 ——使用数组初始化vector对象
  5. 使用jsoup进行网页内容抓取
  6. (转)使用 /proc 文件系统来访问 Linux 内核的内容
  7. Ubuntu下Sublime Text 3无法输入中文的解决方案
  8. matlab初学者_脚本文件调用函数文件
  9. TCLP 第一章 1.5字符输入输出
  10. vim简单命令教程-firstblood
  11. python基本数据类型——tuple
  12. R画图的颜色搭配
  13. 浅谈Java和PHP的异同
  14. Twisted 安装
  15. MySQL学习笔记:upper、lower、ucase、lacase——字符串函数
  16. C语言:冒泡排序法:将若干字符串按字母顺序(由小到大)排序输出
  17. react: typescript-webpack项目基本配置
  18. FZU 2202——犯罪嫌疑人——————【思维题】
  19. codeforces 632B B. Alice, Bob, Two Teams(暴力)
  20. JNI/NDK开发

热门文章

  1. SUSE CaaS Platform 4 - 安装部署
  2. Docker 为非root用户授权
  3. vue 上传文件 和 下载文件 面试的时候被问到过
  4. 我又不是你的谁--java instanceof操作符用法揭秘
  5. 从0开始学FreeRTOS-(列表与列表项)-3
  6. Adobe PS常用快捷键
  7. css父元素透明度(opacity)对子元素的影响
  8. JNI静态注册与动态注册详解
  9. nm 命令能够显示目标文件中重载函数的名字改变(C++)
  10. 「看完不后悔系列!」Maya的建模小技巧