传送门

Can you answer these queries?

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 18290    Accepted Submission(s): 4308

Description

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.

Input

The 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 263.
  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.

Output

For 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

思路

题意:有N个数,有两种操作,当T = 0时,区间L到R的数都变为自己的开方(向下取整),当 T = 1时,计算出区间L到R的和。

思路:由于数最大不超过2的63次方,因此开六次就为1,因此通过lazy数组记录当前的数能否继续开放下去,不能的话,就不必更新,因为一直是1不变。

#include<bits/stdc++.h>
using namespace std;
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
typedef __int64 LL;
const int maxn = 100005;
LL sum[maxn<<2];
bool lazy[maxn<<2];void PushUp(int rt){sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];lazy[rt] = lazy[rt << 1] && lazy[rt << 1 | 1];
}void build(int l,int r,int rt){if (l == r){scanf("%I64d",&sum[rt]);return;}int m = (l + r) >> 1;build(lson);build(rson);PushUp(rt);
}void upd(int L,int R,int l,int r,int rt){if (l == r){sum[rt] = sqrt(sum[rt]);if (sum[rt] <= 1)   lazy[rt] = 1;return;}int m = (l + r) >> 1;if (L <= m && !lazy[rt << 1]) upd(L,R,lson);if (R > m && !lazy[rt << 1 | 1])  upd(L,R,rson);PushUp(rt);
}LL qry(int L,int R,int l,int r,int rt){if (L <= l && r <= R){return sum[rt];}LL ret = 0;int m = (l + r) >> 1;if (L <= m) ret += qry(L,R,lson);if (R > m)  ret += qry(L,R,rson);return ret;
}int main(){int cases = 1;int N,M,T,a,b;while (~scanf("%d",&N)){memset(lazy,false,sizeof(lazy));memset(sum,0,sizeof(sum));printf("Case #%d:\n",cases++);build(1,N,1);scanf("%d",&M);while (M--){scanf("%d%d%d",&T,&a,&b);if (a > b)  swap(a,b);if (T == 0){upd(a,b,1,N,1);}else{printf("%I64d\n",qry(a,b,1,N,1));}}printf("\n");}return 0;
}

  

#include<bits/stdc++.h>
using namespace std;
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
typedef __int64 LL;
const int maxn = 100005;
LL sum[maxn];void PushUp(int rt){sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}void build(int l,int r,int rt){if (l == r){scanf("%I64d",&sum[rt]);return;}int m = (l + r) >> 1;build(lson);build(rson);PushUp(rt);
}void upd(int L,int R,int l,int r,int rt){if (sum[rt] == r - l + 1)   return;if (l == r){sum[rt] = sqrt(sum[rt]);return;}int m = (l + r) >> 1;if (L <= m) upd(L,R,lson);if (R > m)  upd(L,R,rson);PushUp(rt);
}LL qry(int L,int R,int l,int r,int rt){if (L <= l && r <= R){return sum[rt];}LL ret = 0;int m = (l + r) >> 1;if (L <= m) ret += qry(L,R,lson);if (R > m)  ret += qry(L,R,rson);return ret;
}int main(){int cases = 1;int N,M,T,a,b;while (~scanf("%d",&N)){printf("Case #%d:\n",cases++);build(1,N,1);scanf("%d",&M);while (M--){scanf("%d%d%d",&T,&a,&b);if (a > b) swap(a,b);if (T == 0){upd(a,b,1,N,1);}else{printf("%I64d\n",qry(a,b,1,N,1));}}}return 0;
}

  

转载于:https://www.cnblogs.com/ZhaoxiCheung/p/7352039.html

HDU 4027 Can you answer these queries?(线段树/区间不等更新)相关推荐

  1. HDU - 4027 Can you answer these queries?(线段树)

    题目链接:点击查看 题目大意:给定n艘敌军的舰队,每艘舰队都有一定的耐力值,随后进行m次操作,共包括两种操作,分别是输出区间[l,r]中的耐力 值之和,以及将区间[l,r]中的每个的耐力值都开平方 题 ...

  2. hdu - 4027 Can you answer these queries?

    http://acm.hdu.edu.cn/showproblem.php?pid=4027 /** * 题意:给你n个数,对这些数进行操作,有m组操作 * q == 0 [x,y]区间内的每个数开方 ...

  3. hdu 4027 Can you answer these queries?

    http://acm.hdu.edu.cn/showproblem.php?pid=4027 [更新区间,查询区间]的线段树,必须抓住修改6次以后每个数必然会变成1,然后以后的修改都将不起作用,在此之 ...

  4. 【HDU - 1166】敌兵布阵 (线段树模板 单点更新+ 区间查询)

    题干: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情 ...

  5. HDU-4027 Can you answer these queries? --线段树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4027 题意及思路: 有一排战舰,给出每个战舰的能力值,存在两种操作:第一种是把一定范围内所有战舰能力 ...

  6. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

    Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...

  7. hdu 5692 Snacks(dfs序+线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692 解题思路:这道题是树节点的点权更新,而且涉及到子树,常用的思路是利用dfs序,用线段树来对区间进 ...

  8. hdu 3966(树链剖分+线段树区间更新)

    传送门:Problem 3966 https://www.cnblogs.com/violet-acmer/p/9711441.html 学习资料: [1]线段树区间更新:https://blog.c ...

  9. hdu 1698 Just a Hook 线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Let us number the consecutive metallic sticks of ...

最新文章

  1. atom创建html文件夹,如何在Atom文本编辑器中按文件类型设置默认语法?
  2. POJ-1050 To the Max 二维最大子段和
  3. JAVA awt eventqueue_线程“AWT-EventQueue-1”中的异常java.lang.NullPointerException
  4. Xcode模版生成文件头部注释
  5. Volumetric 3D Mapping in Real-Time on a CPU
  6. gc android,Android GC Log解读
  7. ccs软件linux安装,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...
  8. 第6讲 Zend 整合数据库
  9. 贪心算法3——加油站问题
  10. php 调用 百度句法分析,【原创源码】百度新版翻译API调用使用范例
  11. vmd安装包_VMD 1.9.1 安装和使用(Centos6.3)
  12. mysql多对多关系的理解,由一对多看向多对多
  13. SSH 通过跳板机连接远程主机
  14. 给大家分享一个很好用的屏幕共享小软件
  15. php7 kernel32,usleep()
  16. 将POLY-YOLO代码跑起来的环境配置,poly-yolo训练自己的数据集
  17. Android基础入门教程——1.1 背景相关与系统架构分析
  18. java poi生成的word表格在wps中的显示问题
  19. 据说是11年度最佳代码
  20. python画花瓣飘落_Python——画一棵漂亮的樱花树

热门文章

  1. 手游方舟怎么输入代码_明日方舟再次登顶失败,为了不发十连奖励,鹰角实力控分?...
  2. Java 多线程 —— AQS 原理
  3. 两个摄像头合成一路_教你把一个摄像机添加到两台录像机
  4. python 删除特定行数据_怎么用 Python 做数据分析实例
  5. 如何抓取html请求,怎么获取请求头
  6. java调用 restapi 乱码_Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
  7. oracle查询可更新结果集,jdbc 可更新结果集
  8. 基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
  9. java下文_java实现文件下载的两种方式
  10. abb限位开关已打开drv1_Telemecanique传感器限位开关产品系列