背景

XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。

描述

“第一分钟,X说,要有数列,于是便给定了一个正整数数列。

第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。

第三分钟,k说,要能查询,于是便有了求一段数的和的操作。

第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。

第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。

第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过64位有符号整数类型的表示范围的限制。

第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”

——《上帝造题的七分钟·第二部》

所以这个神圣的任务就交给你了。

输入格式

第一行一个整数n,代表数列中数的个数。

第二行n个正整数,表示初始状态下数列中的数。

第三行一个整数m,表示有m次操作。

接下来m行每行三个整数k,l,r,k=0表示给[l,r]中的每个数开平方(下取整),k=1表示询问[l,r]中各个数的和。

UPD:注意数据中有可能l>r,所以遇到这种情况请交换l和r。

输出格式

对于询问操作,每行输出一个回答。

测试样例1

输入

10

1 2 3 4 5 6 7 8 9 10

5

0 1 10

1 1 10

1 1 5

0 5 8

1 4 8

输出

19

7

6

备注

对于30%的数据,1<=n,m<=1000,数列中的数不超过32767。

对于100%的数据,1<=n,m<=100000,1<=l,r<=n,数列中的数大于0,且不超过1e12。

注意l有可能大于r,遇到这种情况请交换l,r。

思路:树状数组+并查集

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
long long n,m,k,l,r,a[105000],f[100500],c[105000];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
int lowbit(int x){return x&(-x);}
void add(int x,LL w){while(x<=n)c[x]+=w,x+=lowbit(x);}
LL query(int x){
LL ans=0;
while(x)ans+=c[x],x-=lowbit(x);
return ans;
}
LL get(){
long long x=0;char p=getchar();
while(p<'0'||p>'9')p=getchar();
while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();
return x;
}
int main(){
scanf("%lld",&n);
for(int i=0;i<=n+10;i++)f[i]=i;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
add(i,a[i]);
}
scanf("%lld",&m);
for(int i=1;i<=m;i++){
k=get(),l=get(),r=get();
if(l>r)swap(l,r);
if(!k)
for(int i=find(l);i<=r;i=find(i+1)){
int jy=floor(sqrt(a[i]));
if(jy==1)f[i]=find(i+1);
add(i,jy-a[i]);
a[i]=jy;
}
else printf("%lld\n",query(r)-query(l-1));
}
}

最新文章

  1. 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default
  2. CSS3动画几个平时没注意的属性
  3. 012.对netmap API的解读
  4. Request Tracker 4.0.13 发布
  5. 【BZOJ】1055: [HAOI2008]玩具取名(dp)
  6. pl/sql developer执行光标所在行
  7. S1:对象与JSON
  8. js函数:setInterval()/clearInterval()——js网页计时器
  9. 201521123049 《JAVA程序设计》 第9周学习总结
  10. Python面试题之copy/deepcopy详解
  11. 如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
  12. Maven构建JavaWeb
  13. Python中print格式化输出
  14. python 打印输出至文件中, &#39;wt&#39;读写文件方式,会把原文件内容清空
  15. hdu 4974 贪心
  16. package.json常用的字段
  17. 【前端】JS截取字符串常用方法详细整理
  18. FreeMarker初探--介绍
  19. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 &quot;64,000&quot; 实体扩展; 这是应用程序施加的限制
  20. 使用 URLDecoder 和 URLEncoder 对统一认证中的http地址转义字符进行处理

热门文章

  1. C# 获取 IEnumerable 集合的个数
  2. javaee IO流复制的方法
  3. ptyhon获取app设备号、包名、activity
  4. js:重复输出字符串中字符
  5. Linux目录与相关配置文件讲解
  6. openldap+openssh+jumpserver实现跳板机监控系统
  7. 洛谷 P3275 BZOJ 2330 [SCOI2011]糖果
  8. LightOJ1234 Harmonic Number
  9. /tmp目录下执行脚本失败提示Permission denied
  10. Java 集合之Collection 接口和遍历方法