博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树(单点更新(模板)) 之 hdu 1166
阅读量:5124 次
发布时间:2019-06-13

本文共 1839 字,大约阅读时间需要 6 分钟。

//  [7/24/2014 Sjm]/*第一道用线段树做的题,照着大神的代码风格写的,,就当作线段树单点更新的模板吧。。。。(当年用树状数组做的:)*/
1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define lson l, m, rt << 1 8 #define rson m + 1, r, rt << 1 | 1 9 #define GetMid l + ((r-l) >> 1)10 11 const int MAX = 50005;12 int sum[MAX << 2];13 14 void PushUp(int rt) { sum[rt] = sum[rt << 1] + sum[rt << 1 | 1]; }15 16 void Build(int l, int r, int rt) {17 if (l == r) { scanf("%d", &sum[rt]); return; }18 int m = GetMid;19 Build(lson);20 Build(rson);21 PushUp(rt);22 }23 24 void Update(int pos, int add, int l, int r, int rt) {25 if (l == r) { sum[rt] += add; return; }26 int m = GetMid;27 if (pos <= m) { Update(pos, add, lson); }28 else { Update(pos, add, rson); }29 PushUp(rt);30 }31 32 int Query(int L, int R, int l, int r, int rt) {33 if (L <= l && r <= R) { return sum[rt]; }34 int ret = 0;35 int m = GetMid;36 if (L <= m) { ret += Query(L, R, lson); }37 if (R > m) { ret += Query(L, R, rson); }38 return ret;39 }40 41 int main()42 {43 //freopen("input.txt", "r", stdin);44 int T, N, a, b;45 scanf("%d", &T);46 for (int cas = 1; cas <= T; ++cas) {47 printf("Case %d:\n", cas);48 scanf("%d", &N);49 Build(1, N, 1);50 char str[10];51 while (scanf("%s", str) && 'E' != str[0]) {52 scanf("%d %d", &a, &b);53 if ('Q' == str[0]) { printf("%d\n", Query(a, b, 1, N, 1)); }54 else {55 if ('A' == str[0]) { Update(a, b, 1, N, 1); }56 else { Update(a, -b, 1, N, 1); }57 }58 }59 }60 return 0;61 }

转载于:https://www.cnblogs.com/shijianming/p/4140819.html

你可能感兴趣的文章
WPF 蒙罩层 LoadingPage
查看>>
SQLServer日期格式化
查看>>
Android项目实战(二十二):启动另一个APP or 重启本APP
查看>>
VS生成Cordova for Android应用之Gradle
查看>>
ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区...
查看>>
VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook)
查看>>
Ubuntu 14.04 LAMP搭建(Apache 2.47+MySQL 5.5+PHP5.5)
查看>>
使用.net备份和还原数据库
查看>>
ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布
查看>>
asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)...
查看>>
一些有用的javascript实例分析(二)
查看>>
Android_Kotlin 代码学习
查看>>
关于android:windowNoTitle不起作用的解决办法
查看>>
关于使用Transaction对于非数据库事务的操作
查看>>
私钥公钥学习心得(二)比特币与支付宝
查看>>
瀑布流插件|jquery.masonry|使用demo
查看>>
Exchange Version and UpdateRollups
查看>>
渗透测试流程(单台服务器)
查看>>
Java进阶07 嵌套类
查看>>
gcc 4.9编译
查看>>