csu 1110 RMQ with Shifts 线段树
来源:互联网 发布:手机可以禁止安装软件 编辑:程序博客网 时间:2024/06/02 13:16
题意:求动态rmq
思路:因为要移动的数据很小,不过是移动十几个,所以可以每次一边移动后更新
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1110
#include <stdio.h>#include <algorithm>#include <iostream>#include <string.h>using namespace std;#define lson l, m, rt << 1#define rson m+1, r, rt << 1 | 1const int maxn = 111111;int minn[maxn<<2];void pushup(int rt){ minn[rt] = min(minn[rt << 1], minn[rt << 1 | 1]);}void build(int l, int r, int rt){ if(l == r) { scanf("%d", &minn[rt]); return; } int m = (l+r) >> 1; build(lson); build(rson); pushup(rt);}int query(int L, int R, int l, int r, int rt){ if(L <= l && R >= r) return minn[rt]; int m = (l+r) >> 1; int res = 0x3f3f3f3f; if(m >= L) res = min(res, query(L, R, lson)); if(m < R) res = min(res, query(L, R, rson)); return res;}void update(int l, int r, int rt, int loc, int val){ if(l == r) { minn[rt] = val; return; } int m = (l+r) >> 1; if(m >= loc) update(lson, loc, val); else update(rson, loc, val); pushup(rt);}int main(){ int n, q, cnt; char s[35]; int a[30]; scanf("%d%d", &n, &q); build(1, n, 1); while(q--) { scanf("%s", s); if(s[0] == 'q') { int l = 0, r = 0, i; for(i = 6; s[i] != ','; i++) l = l*10 + s[i]-'0'; for(i++; s[i] != ')'; i++) r = r*10 + s[i]-'0'; printf("%d\n", query(l, r, 1, n, 1)); } else { cnt = 0; int i = 6; while(s[i] != ')' && s[i] != '\0')//把shift的数存到a数组 { int num = 0; while(s[i] != ',' && s[i] != ')') { num = num * 10 + s[i] - '0'; i++; } i++; a[cnt++] = num; } int tmp = query(a[0], a[0], 1, n, 1);//这几行都是在循环移动 for(int i = 0; i < cnt-1; i++) { int c = (i+1)%cnt; int rr = query(a[c], a[c], 1, n, 1); update(1, n, 1, a[i], rr); } update(1, n, 1, a[cnt-1], tmp); } } return 0;}
0 0
- csu 1110 RMQ with Shifts 线段树
- csu 1110 RMQ with Shifts(线段树) 解题报告
- acm湖南第七届省赛 RMQ with Shifts (线段树) csu 1110
- CSU-1110 RMQ with Shifts (单点更新+区间最小值 zkw线段树)
- UVA 12299 - RMQ with Shifts 线段树
- RMQ with Shifts 线段树基基础
- RMQ with Shifts 线段树+点修改
- UVA 12299 - RMQ with Shifts(线段树)
- uva 12299 - RMQ with Shifts(线段树)
- UVA12299 - RMQ with Shifts(线段树)
- uva12299 RMQ with Shifts(线段树基础)
- UVA 12299 RMQ with Shifts 线段树
- UVa 12299 RMQ with Shifts(线段树)
- UVA 12299 RMQ with Shifts(线段树)
- (TLE待AC)CSU 1110 RMQ with Shifts
- UVa 12299 - RMQ with Shifts 线段树 单点更新
- UVA 12299 RMQ with Shifts(线段树)
- TOJ 4325 RMQ with Shifts / 线段树单点更新
- 高级数据管理
- 【poj3141】 Distant Galaxy
- 浅谈C的scanf
- Codeforces 23 E Tree 树形dp+高精
- HDU1937How many ways(记忆化搜索)入门
- csu 1110 RMQ with Shifts 线段树
- 关于 const,以下正确的是
- CentOS6.5的用户管理
- unity中的碰撞检测
- eetcode_c++:链表:Swap Nodes in Pairs(024)
- B. Remainders Game
- Android小知识点积累
- UVA-10815 Andy's First Dictionary
- 树——找到二叉树中的最大二叉搜索树