传送门Can you answer these queries?

题意:线段树,只是区间修改变成 把每个点的值开根号;

思路:对【X,Y】的值开根号,由于最大为 263.可以观察到最多开根号7次即为1,则当根号次数大于等于7时,这段区间值为R-L+1,还有一点是L可能大于R。

以下来自鸟神:(真是强啊)

据这一性质,我们可以得到一种解决方案:对于修改,我们对于区间内的数不全为1的区间更新,直到遇到区间内的数全部为1的区间或者叶子结点为止。这样只要使用线段树,维护区间和的信息即可。 

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll; const int maxn = ;
ll a[maxn],sum[maxn*];
int n,m; void pushup(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
} void buildup(int l,int r,int rt)
{
if(l==r)
{
sum[rt]=a[l];
return ;
}
int mid = (l+r)>>;
buildup(l,mid,rt<<);
buildup(mid+,r,rt<<|);
pushup(rt);
}
void update(int L,int R,int l,int r,int rt)
{
if(sum[rt]==r-l+)return ; // 剪枝
if(l==r)
{
sum[rt]=(int)sqrt(sum[rt]);
return;
}
int mid=(l+r)>>;
if(mid>=L)update(L,R,l,mid,rt<<);
if(R>mid)update(L,R,mid+,r,rt<<|);
pushup(rt);
}
ll query (int L,int R,int l,int r,int rt)
{ if(L<=l&&r<=R)
{
return sum[rt];
}
ll ans = ;
int mid=(l+r)>>;
if(mid>=L)ans+=query(L,R,l,mid,rt<<);
if(R>mid)ans+=query(L,R,mid+,r,rt<<|);
return ans;
}
int main(){
int cnt=;
while(~scanf("%d",&n))
{
printf("Case #%d:\n",++cnt);
memset(a,,sizeof(a));
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
}
buildup(,n,);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int op,a,b;
scanf("%d%d%d",&op,&a,&b);
if(a>b)swap(a,b);
if(op==)
{
ll ans = query(a,b,,n,);
printf("%lld\n",ans);
}
else
{
update(a,b,,n,);
}
}
printf("\n");
}
return ;
}

最新文章

  1. [LeetCode] Convex Polygon 凸多边形
  2. JS对象的创建与使用
  3. 【转】linux打包压缩命令
  4. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
  5. 网页压缩gzip的问题及说明教程
  6. docker学习笔记13:Dockerfile 指令 WORKDIR介绍
  7. xcode磁盘大清理
  8. 操作系统学习笔记----进程/线程模型----Coursera课程笔记
  9. jdk各个版本的新特性(jdk1.7,1.8,1.9)
  10. python基础学习小结
  11. springBoot集成redisCluster
  12. 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
  13. 微信小程序里如何用阿里云上传视频,图片。。
  14. 第一册:lesson eighty one.
  15. Com 调用word和excel
  16. python之常用模块补充
  17. spring + quartz定时任务,以及修改定时任务
  18. colgroup中col定义表格单元格宽度
  19. Prometheus Node_exporter 之 Memory Detail Vmstat
  20. c# 正则表达式 首字母转大写

热门文章

  1. CSS开启硬件加速来提高网站性能
  2. 图片验证码+session
  3. Danjgo学习笔记(一)
  4. 【linux】【qt5界面】【系统托盘图标的实现】
  5. 【KakaJSON手册】06_Model转JSON
  6. Map集合的遍历(利用entry接口的方式)
  7. 曹工杂谈:Java 类加载还会死锁?这是什么情况?
  8. Sqlserver 使用.net查询被事务锁住处理
  9. SQL Server检索存储过程的结果集
  10. Mybatis-plus的两种分页插件的配置方式