P4145 上帝造题的七分钟2

摘要:
第四分钟,彩虹喵说,如果很难发声,那么就会有一个数据范围。“-上帝创造标题的七分钟-第二部分所以你被赋予了这项神圣的任务。第二行包含nn个正整数,代表初始状态下数字序列中的数字。输入和输出样本输入样本#1012345678910101110110110115058148输出样本#11976显示,对于30%的数据,1len,mle10001≤ n、 米≤ 1000,并且数字列中的数字不超过3276732767。对于100%数据,1len,mle1000001≤ n、 米≤ 100000,1升,1轮≤ l、 r(r)≤ n、 数字序列中的数字大于00,且不超过10^{12}1012。如果间隔的最大值为1,则跳过对该间隔的修改。

题目描述

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

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

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

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

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

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

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

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

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

输入输出格式

输入格式:

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

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

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

接下来 mm 行每行三个整数k,l,r

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

数据中有可能 l>rl>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
输出样例#1
19
7
6

说明

对于30%的数据, 1le n,mle 10001n,m1000 ,数列中的数不超过 3276732767 。

对于100%的数据, 1 le n,m le 1000001n,m100000 , 1 le l,r le n1l,rn ,数列中的数大于 00 ,且不超过 10^{12}1012 。

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

一道线段树的题目。

首先我们考虑一下,一个小于等于10^12的数,开了6次方之后就已经等于1了(可以自己拿计算器算一下)。而对于1,再开方也没有意义。也就是说,对每一个数,总共的开方次数只有6*n。所以我们可以开一个线段树,对于每一个修改操作,暴力修改。如果某区间的最大值为1,则跳过此区间的修改。最后基本上就是模板了

 1 //minamoto
 2 #include<bits/stdc++.h>
 3 #define ll long long
 4 #define rint register int
 5 using namespace std;
 6 const int N=400005;
 7 int n,m;ll a[N],sum[N],maxn[N];
 8 void pushup(int p){
 9     sum[p]=sum[p<<1]+sum[p<<1|1];
10     maxn[p]=max(maxn[p<<1],maxn[p<<1|1]);
11 }
12 void build(int p,int l,int r){
13     if(l==r){
14         sum[p]=maxn[p]=a[l];return;
15     }
16     int mid=(l+r)>>1;
17     build(p<<1,l,mid);
18     build(p<<1|1,mid+1,r);
19     pushup(p);
20 }
21 void change(int p,int l,int r,int ql,int qr){
22     if(l==r){
23         sum[p]=sqrt(sum[p]),maxn[p]=sqrt(maxn[p]);return;
24     }
25     int mid=(l+r)>>1;
26     if(ql<=mid&&maxn[p<<1]>1) change(p<<1,l,mid,ql,qr);
27     if(qr>mid&&maxn[p<<1|1]>1) change(p<<1|1,mid+1,r,ql,qr);
28     pushup(p);
29 }
30 ll query(int p,int l,int r,int ql,int qr){
31     if(ql<=l&&qr>=r) return sum[p];
32     int mid=(l+r)>>1;
33     ll res=0;
34     if(ql<=mid) res+=query(p<<1,l,mid,ql,qr);
35     if(qr>mid) res+=query(p<<1|1,mid+1,r,ql,qr);
36     return res;
37 }
38 int main(){
39     scanf("%d",&n);
40     for(rint i=1;i<=n;++i) scanf("%lld",&a[i]);
41     build(1,1,n);
42     scanf("%d",&m);
43     while(m--){
44         int opt,l,r;
45         scanf("%d%d%d",&opt,&l,&r);
46         if(l>r) swap(l,r);
47         if(opt==0) change(1,1,n,l,r);
48         else printf("%lld
",query(1,1,n,l,r));
49     }
50     return 0;
51 }

免责声明:文章转载自《P4145 上帝造题的七分钟2》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]TamperIE使用说明mui框架中H5+获取经纬度信息详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

前端利器躬行记(7)——自制脚手架

path是Node.js中的路径模块path.resolve()用于解析绝对路径,__dirname可读取当前模块的目录名。静态资源最终路径=output.publicPath+加载器或插件的配置路径。假设html元素的背景是一条相对路径,那么最后生成的路径将会是“/img/lake.png”,其中配置的输出目录是“img”。paths.servedPath...

Excel数据透视表、高级筛选

目录:1.数据透视表:数据透视表格式和操作说明:多个表一起创建数据透视表创建组创建计算字段创建计算项值显示方法切片器2。高级过滤:高级过滤和或关系精确过滤和模糊过滤通配符过滤原则查询不重复值(使用高级过滤)高级过滤区分大小写使用高级过滤查找空数据使用高级过滤查询两个表中相同的记录或未使用的记录过滤记录1和数据透视表1.正确的数据透视表格式:① 数据源的第一行...

批处理bat脚本自动配置java的jdk环境变量

前言每次更换计算机或重新安装系统时,都需要重新配置java系统路径。但我不想每次都检查配置方法,所以我编写了一个脚本来自动配置。脚本内容@echooff@echo步骤1:输入要设置的JAVA_HOME路径:set/pinput=“请输入JAVA_HOME路径:”@echo步骤2:设置JAVA_ HOME路径setxJAVA_HOME“%input%”/M@e...

MongoDB用户与角色管理

MongoDB默认不启用访问控制。管理员可以在配置文件授权参数中使用--auth-in restart或security来启用访问控制。(4) MongoDB在每个数据库上提供内置的DatabaseUserRoles和DatabaseAdministrationRoles。MongoDB仅为管理数据库提供所有内置角色。此角色没有用户和角色管理权限。(4.4)...

Vant 实现 上拉加载更多

Vant的List组件默认支持瀑布流滚动加载。官方的示例是用定时器模拟的数据。我们在项目实战中,肯定是结合ajax请求处理的。那么我们该如何实现这个效果呢?Vant的List组件使用方法这里就不详细说明了,官方文档已经写的很详细了。直接上项目中的实战代码://itemList换成你自己的数据//没数据时显示˂divclass="no-data"v-if="!...

一款支持显卡GPU的视频格式转换工具转码软件,速度快提升400%

只要软件有图形卡,转换速度非常快,但也有一个缺点。转换后的视频文件大于格式工厂。软件还可以自行设置各种转换参数。当然,你需要更加熟练。我们没有更多的麻烦了。如何确保最小音量的最佳质量,将留给您来解决问题。...