hdu 4666 Hyperspace(线段树)
2015-11-06 21:41
267 查看
题目链接:hdu 4666 Hyperspace
解题思路
线段树单点修改,区间查询。做2k维护ans数组即可。代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define lson(x) ((x)<<1) #define rson(x) (((x)<<1)|1) const int maxn = 60005; const int inf = 0x3f3f3f3f; int lc[maxn<<2], rc[maxn<<2], mi[maxn<<2], mx[maxn<<2]; void pushup(int u) { mi[u] = min(mi[lson(u)], mi[rson(u)]); mx[u] = max(mx[lson(u)], mx[rson(u)]); } void build (int u, int l, int r) { lc[u] = l, rc[u] = r; mi[u] = inf, mx[u] = -inf; if (l == r) return; int mid = (l + r) >> 1; build(lson(u), l, mid); build(rson(u), mid+1, r); pushup(u); } void modify(int u, int x, int v) { if (lc[u] == rc[u]) { mi[u] = mx[u] = v; return ; } int mid = (lc[u] + rc[u]) >> 1; if (x <= mid) modify(lson(u), x, v); else modify(rson(u), x, v); pushup(u); } void clear(int u, int x) { if (lc[u] == rc[u]) { mi[u] = inf; mx[u] = -inf; return ; } int mid = (lc[u] + rc[u]) >> 1; if (x <= mid) clear(lson(u), x); else clear(rson(u), x); pushup(u); } int N, K, ans[maxn]; int op[maxn], id[maxn], P[maxn][5]; void init () { for (int i = 1; i <= N; i++) { scanf("%d", &op[i]); if (op[i]) scanf("%d", &id[i]); else { for (int j = 0; j < K; j++) scanf("%d", &P[i][j]); } } memset(ans, 0, sizeof(ans)); } int get(int* x, int s) { int ret = 0; for (int i = 0; i < K; i++) { if (s&(1<<i)) ret += x[i]; else ret -= x[i]; } return ret; } int main () { while (scanf("%d%d", &N, &K) == 2) { init(); for (int i = 0; i < (1<<K); i++) { build(1, 1, N); for (int j = 1; j <= N; j++) { if (op[j]) clear(1, id[j]); else { int tmp = get(P[j], i); modify(1, j, tmp); } ans[j] = max(ans[j], mx[1] - mi[1]); } } for (int i = 1; i <= N; i++) printf("%d\n", ans[i]); } return 0; }
相关文章推荐
- 声明map对象时你不知道的事
- 二维RMQ
- php中==和===的区别
- NLPIR2014配置及使用(C语言)
- Linux下载安装sshd服务,用SecureCRT连接虚拟机
- perf 工具介绍2
- On Hat Puzzle 2.1: From Dr. Todd Ebert's thesis
- hdu 4665 Unshuffle(暴力)
- android4.3-android4.4.2触摸唤醒
- 计算机原理之c语言实现链表
- LeetCode16:3Sum Closest
- Android中的webview详细使用
- 大端小端的判断
- 去掉 WordPress 3.1+版本顶部的admin bar管理工具
- Linux时间函数
- 为什么有logistics函数
- Matlab “Out of memory”解决办法
- Libev源码分析06:异步信号同步化--sigwait、sigwaitinfo、sigtimedwait和signalfd
- hdu 4664 Triangulation(博弈)
- 地理位置查询附近商家