POJ - 1195 - Mobile phones (二维线段树)
来源:互联网 发布:c语言中求绝对值的代码 编辑:程序博客网 时间:2024/06/06 06:14
Mobile phones
题目传送:Mobile phones
AC代码:
/************************************************ > Auther : zzuspy > Mail : zzuspy@qq.com > Created Time : 2015/8/7 15:24:00************************************************/#include <map>#include <set>#include <list>#include <cmath>#include <deque>#include <queue>#include <stack>#include <bitset>#include <cctype>#include <cstdio>#include <string>#include <vector>#include <complex>#include <cstdlib>#include <cstring>#include <fstream>#include <sstream>#include <utility>#include <iostream>#include <algorithm>#include <functional>#define LL long long#define INF 0x7fffffffusing namespace std;const int maxn = 1050;int sum[maxn * 3][maxn * 3];int S;//区间长度int X, Y, A;int L, B, R, T;void add_x(int rty, int rtx, int L, int R, int x, int a) {//往rty这个区间找x轴的区间更新a sum[rty][rtx] += a; if(L == R) { return; } int mid = (L + R) >> 1; if(x <= mid) { add_x(rty, rtx << 1, L, mid, x, a); } else { add_x(rty, rtx << 1 | 1, mid + 1, R, x, a); }}void add_y(int rty, int L, int R, int x, int y, int a) {//在y轴上更新a add_x(rty, 1, 1, S, x, a); if(L == R) { return; } int mid = (L + R) >> 1; if(y <= mid) { add_y(rty << 1, L, mid, x, y, a); } else { add_y(rty << 1 | 1, mid + 1, R, x, y, a); }}int query_x(int rty, int rtx, int L, int R, int x1, int x2) { if(L >= x1 && R <= x2) { return sum[rty][rtx]; } int ret = 0; int mid = (L + R) >> 1; if(x1 <= mid) ret += query_x(rty, rtx << 1, L, mid, x1, x2); if(x2 > mid) ret += query_x(rty, rtx << 1 | 1, mid + 1, R, x1, x2); return ret;}int query_y(int rty, int L, int R, int y1, int y2, int x1, int x2) { if(L >= y1 && R <= y2) { return query_x(rty, 1, 1, S, x1, x2); } int ret = 0; int mid = (L + R) >> 1; if(y1 <= mid) ret += query_y(rty << 1, L, mid, y1, y2, x1, x2); if(y2 > mid) ret += query_y(rty << 1 | 1, mid + 1, R, y1, y2, x1, x2); return ret;}int main() { int op; while(true) { scanf("%d", &op); switch(op) { case 0: scanf("%d", &S); memset(sum, 0, sizeof(sum)); break; case 1: scanf("%d %d %d", &X, &Y, &A); add_y(1, 1, S, X + 1, Y + 1, A); break; case 2: scanf("%d %d %d %d", &L, &B, &R, &T); L ++, B ++, R ++, T++; printf("%d\n", query_y(1, 1, S, B, T, L, R)); break; case 3: return 0; } } return 0;}
0 0
- POJ 1195 Mobile phones 二维线段树
- POJ 1195 Mobile phones 二维线段树
- POJ - 1195 - Mobile phones (二维线段树)
- POJ 1195 Mobile phones (二维树状数组或线段树)
- POJ 1195 Mobile phones(二维BIT)
- 线段树-- POJ - 1195 Mobile phones
- POJ 1195 Mobile phones 线段树 二维线段树 单点更新 区间求和
- Mobile phones poj1195 二维线段树
- POJ1195 Mobile phones 【二维线段树】
- POJ 1195 Mobile phones (二维树状树组)
- POJ Mobile phones(1195)(二维树状数组)
- POJ 1195 MOBILE PHONES(二维树状数组)
- POJ 1195 Mobile phones(二维树状数组)
- POJ 1195--Mobile phones (二维树状数组)
- poj 1195 Mobile phones(二维树状数组基础)
- POJ 1195 Mobile phones (二维树状数组)
- [poj 1195] Mobile phones(二维树状数组)
- POJ 1195 Mobile phones (二维树状数组)
- ASI请求数据
- android:activity生命周期及几个主要函数应当做的事情
- 怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结
- uva 116
- C 函数参数-传值和传址
- POJ - 1195 - Mobile phones (二维线段树)
- hihoCoder_#1069_最近公共祖先·三(RMQ-ST模板)
- 倒油问题
- 一秒钟检测一个局域网网段--VB.NET通过异步Ping方法测试局域网通断(非多线程)
- 自定义View之会动的闪电
- 关于JAVA的几种排序算法研究
- Lecture 1: The Learning Problem(学习问题)
- grid++report详解
- 黑马程序员 oc随机 点语法