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 }

最新文章

  1. poj[1185]炮兵阵地
  2. hdu2302(枚举,大数取模)
  3. SQL Server 2008 R2 找不到 Install SQL Server Profiler 找不到 事件探查器 解决
  4. PowerDesiger 15逆向生成工程E-R图及导出word表格
  5. OBIEE 11g:Error:nQSError 36010 Server version 318 cannot read the newer version of the repository
  6. IOS使用APNS推送Payload字节数限制导致推送不成功
  7. 网站开发常用jQuery插件总结(14)图片修剪插件Jcrop
  8. Js设置所有连接是触发/swt/的代码
  9. [转] 深入剖析 linux GCC 4.4 的 STL string
  10. SQL Server 2008 (R2) 单机版安装的先决条件
  11. 邮箱自动完成(jquary效果)
  12. fir.im Weekly - 2017 年必须了解的 iOS 开源库
  13. js、css等引入文件路径正确,却报404的解决办法
  14. 如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)
  15. 字符串匹配的 Boyer-Moore 算法
  16. (转)C# System.Diagnostics.Process.Start使用
  17. laravel DB 执行 mysql函数或者字段
  18. python virtualenv安装说明
  19. 传统数据库没落,OLTP新型数据库发展火热
  20. MongoDB(二)-- Java API 实现增删改查

热门文章

  1. 【C++】《C++ Primer 》第十章
  2. python 2.7.11 环境安装
  3. .NET 5网络操作的改进
  4. 【Java】计算机软件、博客的重要性、编程语言介绍和发展史
  5. LeetCode454. 四数相加 II
  6. CSRF - Pikachu
  7. C#实现一个弹窗监控小程序
  8. React中的合成事件
  9. 1.5V升5V芯片,1.5V升5V电路图规格书
  10. Vim中的swp文件,在vim非正常退出时,再次编辑会出问题