http://acm.hdu.edu.cn/showproblem.php?pid=4027

  【更新区间,查询区间】的线段树,必须抓住修改6次以后每个数必然会变成1,然后以后的修改都将不起作用,在此之前的更新都是暴力更新。这是相当简单的题!

  我的做法是记录那些区间里的数都是小于2的,然后在更新的时候就不必更新那那些区间了。不过这题在数据格式中有个小trick,就是给出的区间范围的两个指针x可以大于y,这时在区间修改之前要交换回来。我就是在这个惯性思维的小trick上卡了一个下午。。。。。囧!

View Code

  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?相关推荐

  1. HDU 4027 Can you answer these queries?(线段树/区间不等更新)

    传送门 Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/6576 ...

  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?(线段树)

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

  4. 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 ...

  5. HDU - 4027

    Can you answer these queries? 链 接 链接 链接 HDU - 4027 题 目 是 区 间 修 改 区 间 查 询 , 但 是 区 间 开 根 号 , 求 区 间 和 题 ...

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

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

  7. 线性代数四之动态DP(广义矩阵加速)——Can you answer these queries III,保卫王国

    动态DP--广义矩阵加速 SP1716 GSS3 - Can you answer these queries III description solution code [NOIP2018 提高组] ...

  8. SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -

    Can you answer these queries II 这是一道线段树的题目,维护历史版本,给出N(<=100000)个数字(-100000<=x<=100000),要求求出 ...

  9. GSS2 - Can you answer these queries II

    GSS2 - Can you answer these queries II 题意: 给你1e51e51e5 的序列,每次询问区间l到rl到rl到r,每个相同的数只算一次的最大子段和. 思路: 乍一眼 ...

最新文章

  1. html语言post下发bin文件,在IIS7中启用html文件的POST请求
  2. 百度地图手机和电脑不一致_你可能不知道的电脑手机冷知识
  3. Swin Transformer V2!MSRA原班人马提出了30亿参数版本的Swin Transformer!
  4. php中统一编码语句,统一编码
  5. LINUX加载静态库so,取得函数地址并调用
  6. 苹果电脑怎么进入虚拟服务器设置,苹果Mac电脑 Vmware虚拟机共享文件夹设置教程...
  7. 经天测绘测量工具包_公共土地测量系统
  8. as常用固定搭配_as 。。。as 一些常考的固定搭配【重点中考】
  9. ireport oracle,用ireport调用oracle存储过程
  10. 荣耀7点击Android版本,荣耀7全网通版Android5.0 电信版本刷机工具
  11. 为何越来越多人买苹果?因为6年前的iPhone碾压新款国产中端手机
  12. 哪款蓝牙耳机适合吃鸡?盘点2022适合苹果吃鸡的蓝牙耳机
  13. 大数据Hadoop之——EFAK和Confluent KSQL简单使用(kafka listeners 和 advertised.listeners)
  14. mysql sql loader_Data Loader
  15. MAC 下面卸载JDK
  16. R语言-出图时的中英文字体解决方案
  17. 自建cdn搭建_自建CDN
  18. 向mysql写入时间_Python向Mysql写入时间类型数据
  19. JDBC数据库连接和事务的管理 一个JDBC基本操作封装类的编写
  20. idm一个网站不能下载两次?这几个办法彻底解决

热门文章

  1. 如何printf64位整型! scanf sscanf
  2. 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
  3. gcc 中的__attribute__ ((packed)) gcc移植,内存对齐.结构体对齐-转
  4. L3-020 至多删三个字符 (30 分)-PAT 团体程序设计天梯赛 GPLT
  5. [Java] 蓝桥杯ADV-136 算法提高 大数加法
  6. 蓝桥杯 BASIC-15 基础练习 字符串对比
  7. h5首页加载慢_Webview加载H5优化小记
  8. Sublime Text3 + Golang搭建开发环境
  9. linux shell中获取mongodb最大连接数、内存使用情况等
  10. 易天40G QSFP+光模块的规格参数