HDU1166敌兵布阵 分块解法,分块练习
来源:互联网 发布:西南政法大学王洪 知乎 编辑:程序博客网 时间:2024/06/02 03:32
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166
线段树,树状数组的模板题。用来入门分块。
#include<bits/stdc++.h>using namespace std;const int N = 5e4+10;int block;int n;int arr[N], sum[N];void update(int pos, int val){ arr[pos] += val; sum[pos/block] += val;}int query(int s, int e){ int ans = 0; for (int i = 0, l = 1, r = block-1; i <= n/block; i++, l = i*block, r += block){ int L = max(l, s); int R = min(r, e); if (L > R) continue; if (L == l && R == r) ans += sum[i]; else for (int j = L; j <= R; j++) ans += arr[j]; } return ans;}int main(){ int T; scanf("%d", &T); for (int kase = 1; kase <= T; kase++){ memset(sum, 0, sizeof(sum)); scanf("%d", &n); block = (int)sqrt(n); for (int i = 1; i <= n; i++){ scanf("%d", &arr[i]); sum[i/block] += arr[i]; } printf("Case %d:\n", kase); char opt[10]; while(scanf("%s", opt) == 1){ if (opt[0] == 'E') break; if (opt[0] == 'Q'){ int s, e; scanf("%d%d", &s, &e); printf("%d\n", query(s, e)); } else{ int pos, val; scanf("%d %d", &pos, &val); if (opt[0] == 'A') update(pos, val); else update(pos, -val); } } } return 0;}
阅读全文
0 0
- HDU1166敌兵布阵 分块解法,分块练习
- 分块法 hdu1166 敌兵布阵
- Hdu1166 敌兵布阵 [分块][树状数组][线段树]
- hdu1166 敌兵布阵【解法一】
- hdu1166 敌兵布阵【解法二】
- hdu_1166 敌兵布阵(线段树/分块)
- 【HDU1166】敌兵布阵,线段树练习
- hdu1166 敌兵布阵
- hdu1166 敌兵布阵
- HDU1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166 敌兵布阵
- hdu1166(敌兵布阵)
- HDU1166:敌兵布阵
- hdu1166敌兵布阵
- HDU1166--敌兵布阵
- HDU1166 敌兵布阵
- hdu1166 敌兵布阵
- 推荐系统-利用用户行为数据判断用户间或商品间相似性、分类和个性化推荐
- 数据结构(Java)--树和二叉树
- 正则表达式总结 re (python演示)
- 13.5. Classes That Manage Dynamic Memory
- CDOJ1598-线段树合并(2017 UESTC Training for Data Structures G)
- HDU1166敌兵布阵 分块解法,分块练习
- javascript 对象描述符
- js 检测变量是否存在
- SSM框架--小功能整合
- python解析XML文件(基础)
- 《Python黑帽子》学习笔记
- 51Nod-1613-翻硬币
- UDP协议的简单使用
- hashMap和Hashtable的区别