hdu 4027 Can you answer these queries?
http://acm.hdu.edu.cn/showproblem.php?pid=4027
【更新区间,查询区间】的线段树,必须抓住修改6次以后每个数必然会变成1,然后以后的修改都将不起作用,在此之前的更新都是暴力更新。这是相当简单的题!
我的做法是记录那些区间里的数都是小于2的,然后在更新的时候就不必更新那那些区间了。不过这题在数据格式中有个小trick,就是给出的区间范围的两个指针x可以大于y,这时在区间修改之前要交换回来。我就是在这个惯性思维的小trick上卡了一个下午。。。。。囧!
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include <cassert> 5 #include <algorithm> 6 7 #define lson l, m, rt << 1 8 #define rson m + 1, r, rt << 1 | 1 9 10 using namespace std; 11 const int maxn = 100001; 12 typedef __int64 ll; 13 14 bool st[maxn << 2]; 15 ll sum[maxn << 2]; 16 17 void up(int rt){ 18 sum[rt] = sum[rt << 1] + sum[rt << 1 | 1]; 19 st[rt] = st[rt << 1] && st[rt << 1 | 1]; 20 } 21 22 void build(int l, int r, int rt){ 23 if (l == r){ 24 scanf("%I64d", &sum[rt]); 25 assert(sum[rt] >= 0); 26 st[rt] = (sum[rt] < 2); 27 28 return ; 29 } 30 int m = (l + r) >> 1; 31 32 build(lson); 33 build(rson); 34 up(rt); 35 } 36 37 void update(int L, int R, int l, int r, int rt){ 38 if (L <= l && r <= R && st[rt]){ 39 return ; 40 } 41 if (l == r){ 42 sum[rt] = (ll) sqrt((double)sum[rt]); 43 st[rt] = (sum[rt] < 2); 44 45 return ; 46 } 47 int m = (l + r) >> 1; 48 49 if (L <= m) update(L, R, lson); 50 if (m < R) update(L, R, rson); 51 up(rt); 52 } 53 54 ll query(int L, int R, int l, int r, int rt){ 55 if (L <= l && r <= R){ 56 return sum[rt]; 57 } 58 ll ret = 0; 59 60 int m = (l + r) >> 1; 61 62 if (L <= m){ 63 ret += query(L, R, lson); 64 } 65 if (m < R){ 66 ret += query(L, R, rson); 67 } 68 69 return ret; 70 } 71 72 int main(){ 73 int n, m, cc = 0; 74 #ifndef ONLINE_JUDGE 75 freopen("in", "r", stdin); 76 #endif 77 while (~scanf("%d", &n)){ 78 build(1, n, 1); 79 cc++; 80 81 scanf("%d", &m); 82 printf("Case #%d:\n", cc); 83 while (m--){ 84 int op, l, r; 85 86 scanf("%d%d%d", &op, &l, &r); 87 if (op){ 88 if (r < l) swap(l, r); 89 assert(l <= r); 90 printf("%I64d\n", query(l, r, 1, n, 1)); 91 } 92 else{ 93 if (r < l) swap(l, r); 94 assert(l <= r); 95 update(l, r, 1, n, 1); 96 } 97 } 98 puts(""); 99 } 100 101 return 0; 102 }
——written by Lyon
转载于:https://www.cnblogs.com/LyonLys/archive/2012/09/10/hdu_4027_Lyon.html
hdu 4027 Can you answer these queries?相关推荐
- HDU 4027 Can you answer these queries?(线段树/区间不等更新)
传送门 Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/6576 ...
- hdu - 4027 Can you answer these queries?
http://acm.hdu.edu.cn/showproblem.php?pid=4027 /** * 题意:给你n个数,对这些数进行操作,有m组操作 * q == 0 [x,y]区间内的每个数开方 ...
- HDU - 4027 Can you answer these queries?(线段树)
题目链接:点击查看 题目大意:给定n艘敌军的舰队,每艘舰队都有一定的耐力值,随后进行m次操作,共包括两种操作,分别是输出区间[l,r]中的耐力 值之和,以及将区间[l,r]中的每个的耐力值都开平方 题 ...
- HDU 1027 G - Can you answer these queries?
http://acm.hdu.edu.cn/showproblem.php?pid=4027 Can you answer these queries? Time Limit: 4000/2000 M ...
- HDU - 4027
Can you answer these queries? 链 接 链接 链接 HDU - 4027 题 目 是 区 间 修 改 区 间 查 询 , 但 是 区 间 开 根 号 , 求 区 间 和 题 ...
- SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并
Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...
- 线性代数四之动态DP(广义矩阵加速)——Can you answer these queries III,保卫王国
动态DP--广义矩阵加速 SP1716 GSS3 - Can you answer these queries III description solution code [NOIP2018 提高组] ...
- SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -
Can you answer these queries II 这是一道线段树的题目,维护历史版本,给出N(<=100000)个数字(-100000<=x<=100000),要求求出 ...
- GSS2 - Can you answer these queries II
GSS2 - Can you answer these queries II 题意: 给你1e51e51e5 的序列,每次询问区间l到rl到rl到r,每个相同的数只算一次的最大子段和. 思路: 乍一眼 ...
最新文章
- html语言post下发bin文件,在IIS7中启用html文件的POST请求
- 百度地图手机和电脑不一致_你可能不知道的电脑手机冷知识
- Swin Transformer V2!MSRA原班人马提出了30亿参数版本的Swin Transformer!
- php中统一编码语句,统一编码
- LINUX加载静态库so,取得函数地址并调用
- 苹果电脑怎么进入虚拟服务器设置,苹果Mac电脑 Vmware虚拟机共享文件夹设置教程...
- 经天测绘测量工具包_公共土地测量系统
- as常用固定搭配_as 。。。as 一些常考的固定搭配【重点中考】
- ireport oracle,用ireport调用oracle存储过程
- 荣耀7点击Android版本,荣耀7全网通版Android5.0 电信版本刷机工具
- 为何越来越多人买苹果?因为6年前的iPhone碾压新款国产中端手机
- 哪款蓝牙耳机适合吃鸡?盘点2022适合苹果吃鸡的蓝牙耳机
- 大数据Hadoop之——EFAK和Confluent KSQL简单使用(kafka listeners 和 advertised.listeners)
- mysql sql loader_Data Loader
- MAC 下面卸载JDK
- R语言-出图时的中英文字体解决方案
- 自建cdn搭建_自建CDN
- 向mysql写入时间_Python向Mysql写入时间类型数据
- JDBC数据库连接和事务的管理 一个JDBC基本操作封装类的编写
- idm一个网站不能下载两次?这几个办法彻底解决
热门文章
- 如何printf64位整型! scanf sscanf
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
- gcc 中的__attribute__ ((packed)) gcc移植,内存对齐.结构体对齐-转
- L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT
- [Java] 蓝桥杯ADV-136 算法提高 大数加法
- 蓝桥杯 BASIC-15 基础练习 字符串对比
- h5首页加载慢_Webview加载H5优化小记
- Sublime Text3 + Golang搭建开发环境
- linux shell中获取mongodb最大连接数、内存使用情况等
- 易天40G QSFP+光模块的规格参数