A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the battleships can be marked a value of endurance. For every attack of our secret weapon, it could decrease the endurance of a consecutive part of battleships by make their endurance to the square root of it original value of endurance. During the series of attack of our secret weapon, the commander wants to evaluate the effect of the weapon, so he asks you for help.
You are asked to answer the queries that the sum of the endurance of a consecutive part of the battleship line.




Notice that the square root operation should be rounded down to integer.

InputThe input contains several test cases, terminated by EOF.

  For each test case, the first line contains a single integer N, denoting there are N battleships of evil in a line. (1 <= N <= 100000)

  The second line contains N integers Ei, indicating the endurance value of each battleship from the beginning of the line to the end. You can assume that the sum of all endurance value is less than 2
63.

  The next line contains an integer M, denoting the number of actions and queries. (1 <= M <= 100000)

  For the following M lines, each line contains three integers T, X and Y. The T=0 denoting the action of the secret weapon, which will decrease the endurance value of the battleships between the X-th and Y-th battleship, inclusive. The T=1 denoting the query of the commander which ask for the sum of the endurance value of the battleship between X-th and Y-th, inclusive.

OutputFor each test case, print the case number at the first line. Then print one line for each query. And remember follow a blank line after each test case.Sample Input

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

Sample Output

Case #1:
19
7
6

这道题太坑了了了了了了了。。。。。。。。。。。

1、你需要用long long

2、为啥我看题目上说的是四舍五入,但是实际操作四舍五入结果都不对,卧槽。。。。。。。

3、对于输入数据你还要判断他给的那个区间,左边节点是不是小于或等于右边节点。。。。这真是让人无语

4、开数组要开题目上N的四倍

5、那个对1、0开方特别慢,所以要特判,,,

注意:不要对区间开方,是对单个点开方,所以区间里面的数最小值应该等于该区间长度

上代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<math.h>
5 #include<algorithm>
6 #include<queue>
7 #include<stack>
8 #include<vector>
9 using namespace std;
10 #define lson l,m,rt<<1
11 #define rson m+1,r,rt<<1|1
12 const int INF=0x3f3f3f3f;
13 const int maxn=100005;
14 typedef long long ll;
15 ll sum[maxn<<2];
16 void pushup(ll rt)
17 {
18 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
19 }
20 void build(ll l,ll r,ll rt)
21 {
22 if(l==r)
23 {
24 scanf("%lld",&sum[rt]);
25 return;
26 }
27 ll m=(l+r)>>1;
28 build(l,m,rt<<1);
29 build(m+1,r,rt<<1|1);
30 pushup(rt);
31 }
32 void update(ll L,ll R,ll l,ll r,ll rt)
33 {
34 if(sum[rt]==r-l+1) return ;
35 //if(sum[rt]==1 || sum[rt]==0) return;
36 //里面数为0、1的时候就不用递归了,这两个数开方特别慢
37 if(l==r)
38 {
39 sum[rt]=(ll)sqrt(sum[rt]);
40 //n=(int)sqrt((double)x);
41 //sqrt()函数,里面的形参是double型的,所以调用的时候,要强制转换成double型。
42 return;
43 }
44 ll m=(l+r)>>1;
45 if(L<=m) update(L,R,l,m,rt<<1);
46 if(R>m) update(L,R,m+1,r,rt<<1|1);
47 pushup(rt);
48 }
49 ll query(ll L,ll R,ll l,ll r,ll rt)
50 {
51 if(l>=L && R>=r)
52 {
53 return sum[rt];
54 }
55 ll m=(l+r)>>1;
56 ll ans=0;
57 if(L<=m) ans+=query(L,R,l,m,rt<<1);
58 if(R>m) ans+=query(L,R,m+1,r,rt<<1|1);
59 return ans;
60 }
61 int main()
62 {
63 int n,m,k=0;
64 while(~scanf("%d",&n))
65 {
66 memset(sum,0,sizeof(sum));
67 k++;
68 printf("Case #%d:\n",k);
69 build(1,n,1);
70 scanf("%d",&m);
71
72 while(m--)
73 {
74 int x,y,z;
75 scanf("%d%d%d",&x,&y,&z);
76 if(z < y)
77 {
78 y = y+z;
79 z = y-z;
80 y = y-z;
81 }
82 if(x==0)
83 {
84 update(y,z,1,n,1);
85 }
86 else
87 {
88 printf("%lld\n",query(y,z,1,n,1));
89 }
90 }
91 printf("\n");
92 }
93 return 0;
94 }

输入:

Output

每次x=1时,每行一个整数,表示这次旅行的开心度

Sample Input4

1 100 5 5

5

1 1 2

2 1 2

1 1 2

2 2 3

1 1 4

Sample Output101

11

11

Hint

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9

这道题和上一道题真是绝配呀。。。。。。。

这个开方和上一道题一样,就是特判哪里不对,因为他是向下取整所以那个开方出来的数据可能为0,所以要另外开一个数组充当标记,当这个父节点的左右子节点都为1、0的时候才可以跳过去

上代码:

 1 //要开方,而且不能用sum[rt]==r-l+1来判断因为向下取整可能会出现0
2 //此时我想说一句:“你好骚呀!”
3 /* ***********************************************
4 ┆ ┏┓   ┏┓ ┆
5 ┆┏┛┻━━━┛┻┓ ┆
6 ┆┃       ┃ ┆
7 ┆┃   ━   ┃ ┆
8 ┆┃ ┳┛ ┗┳ ┃ ┆
9 ┆┃       ┃ ┆
10 ┆┃   ┻   ┃ ┆
11 ┆┗━┓ 马 ┏━┛ ┆
12 ┆  ┃ 勒 ┃  ┆      
13 ┆  ┃ 戈 ┗━━━┓ ┆
14 ┆  ┃ 壁     ┣┓┆
15 ┆  ┃ 的草泥马  ┏┛┆
16 ┆  ┗┓┓┏━┳┓┏┛ ┆
17 ┆   ┃┫┫ ┃┫┫ ┆
18 ┆   ┗┻┛ ┗┻┛ ┆
19 ************************************************ */
20 #include<stdio.h>
21 #include<string.h>
22 #include<iostream>
23 #include<math.h>
24 #include<algorithm>
25 #include<queue>
26 #include<stack>
27 #include<vector>
28 using namespace std;
29 #define lson l,m,rt<<1
30 #define rson m+1,r,rt<<1|1
31 const int INF=0x3f3f3f3f;
32 const int maxn=100005;
33 typedef long long ll;
34 ll sum[maxn<<2],flag[maxn<<2];
35 void pushup(ll rt)
36 {
37 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
38 flag[rt]=flag[rt<<1]&&flag[rt<<1|1];
39 }
40 void build(ll l,ll r,ll rt)
41 {
42 if(l==r)
43 {
44 scanf("%lld",&sum[rt]);
45 return;
46 }
47 ll m=(l+r)>>1;
48 build(l,m,rt<<1);
49 build(m+1,r,rt<<1|1);
50 pushup(rt);
51 }
52 void update(ll L,ll R,ll l,ll r,ll rt)
53 {
54 if(flag[rt]) return ;
55 //if(sum[rt]==1 || sum[rt]==0) return;
56 //里面数为0、1的时候就不用递归了,这两个数开方特别慢
57 if(l==r)
58 {
59 sum[rt]=floor(sqrt(sum[rt]));//这个floor函数加不加都行
60 if(sum[rt]<=1) flag[rt]=1;
61 //n=(int)sqrt((double)x);
62 //sqrt()函数,里面的形参是double型的,所以调用的时候,要强制转换成double型。
63 return;
64 }
65 ll m=(l+r)>>1;
66 if(L<=m) update(L,R,l,m,rt<<1);
67 if(R>m) update(L,R,m+1,r,rt<<1|1);
68 pushup(rt);
69 }
70 ll query(ll L,ll R,ll l,ll r,ll rt)
71 {
72 if(l>=L && R>=r)
73 {
74 return sum[rt];
75 }
76 ll m=(l+r)>>1;
77 ll ans=0;
78 if(L<=m) ans+=query(L,R,l,m,rt<<1);
79 if(R>m) ans+=query(L,R,m+1,r,rt<<1|1);
80 return ans;
81 }
82 int main(){
83 int n;
84 scanf("%d",&n);
85 build(1,n,1);
86 int m;
87 scanf("%d",&m);
88 while(m--){
89 int x,l,r;
90 scanf("%d %d %d",&x,&l,&r);
91 if(x==2)update(l,r,1,n,1);
92 else printf("%lld\n",query(l,r,1,n,1));
93 }
94 return 0;
95 }

G - Can you answer these queries? & N - 花神游历各国的更多相关文章

  1. GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)

    GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...

  2. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  3. BZOJ 3211: 花神游历各国( 线段树 )

    线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么 ...

  4. BZOJ 3211: 花神游历各国【线段树区间开方问题】

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3514  Solved: 1306[Submit][Status][Discu ...

  5. bzoj3211花神游历各国 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4252  Solved: 1547[Submit][Status][Discu ...

  6. 【BZOJ】【3211】花神游历各国

    线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注 ...

  7. BZOJ3211: 花神游历各国(线段树)

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 5692  Solved: 2114[Submit][Status][Discu ...

  8. 【BZOJ3211】花神游历各国 并查集+树状数组

    [BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 ...

  9. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

随机推荐

  1. Over Permission - Pikachu

    概述: 如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作. 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的. 一般越权漏洞容易出现在权限页面( ...

  2. ctfhub技能树—文件上传—MIME绕过

    什么是MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访 ...

  3. Oracle备份审计表SYS.AUD$和SYS.FGA_LOG$

    ORACLE的审计表不可以使用expdp和impdp导出和导入,如果使用,会报如下错误: 需要使用exp和imp进行导出和导出 导出语句: exp " '/ as sysdba' " ...

  4. Ubuntu安装Vivado

    Step1 安装必要的库文件: sudo apt install libncurses5 build-essential openjdk-11-jdk Step2 进入vivado的安装文件夹 sud ...

  5. Ubuntu安装记录

    好吧,这成功地让我想起了那些边肯红薯边黑苹果的早晨······ 本人纯属Windows用腻,后期请大佬多多指教 前面因为没U盘而碰壁的内容在此不说,接下来因为太兴奋,关于安装U盘制作没记录什么.最终, ...

  6. 你真的了解Android系统启动流程吗?Android高级工程师必看系列,已开源

    前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求就行!所 ...

  7. 关掉IE提示“当前安全设置会使计算机有风险”

    我们先来看一下IE浏览器出现的提示窗口,该窗口位于最顶端,不点击设置的话,无法进行下一步的操作. 这时我们点击开始按钮 ,在弹出菜单中选择"运行"菜单项. 在打开的Windows运 ...

  8. PHP 框架之一Laravel

    Laravel: Laravel The phpFramework for Web Artisans and one of the best php framework in year 2014. L ...

  9. jdk安装简洁版

    一.jdk是what? jdk其实是个软件语言开发包,包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. 没有JDK的话,无法编译Java程序(指java源码.java文件),如果想 ...

  10. py, pyc, pyw, pyo, pyd Compiled Python File (.pyc) 和Java或.NET相比,Python的Virtual Machine距离真实机器的距离更远

    https://my.oschina.net/renwofei423/blog/17404 1.      PyCodeObject与Pyc文件 通常认为,Python是一种解释性的语言,但是这种说法 ...