华为OJ 最高分是多少
2014-04-06 11:55
302 查看
线段树维护最大值
#include<stdio.h> #include<stdlib.h> #include<iostream> #include<math.h> #include<string.h> #define MaxNum 30010 using namespace std; int num[MaxNum]; int max(int a, int b) { return a > b ? a : b; } struct SegmentreeNodeTree { int left; int right; int num; int calmid() { return (left + right) / 2; } }treeNode[3 * MaxNum]; int build(int left, int right, int idx) { treeNode[idx].left = left; treeNode[idx].right = right; treeNode[idx].num = -1; if (left == right) return treeNode[idx].num = num[left]; int mid = (left + right) / 2; return treeNode[idx].num = max(build(left, mid, idx << 1),build(mid + 1, right, (idx << 1) + 1)); } void update(int id, int x, int idx) { if (treeNode[idx].left == treeNode[idx].right) { treeNode[idx].num = x; return; } int mid = (treeNode[idx].left + treeNode[idx].right) / 2; if (id <= mid) update(id, x, idx << 1); else update(id, x, (idx << 1) + 1); treeNode[idx].num = max(treeNode[idx << 1].num, treeNode[(idx << 1) + 1].num); } int Query(int left, int right, int idx) { if (left == treeNode[idx].left&&right == treeNode[idx].right) return treeNode[idx].num; int mid = (treeNode[idx].left + treeNode[idx].right) / 2; if (right <= mid) return Query(left, right, idx << 1); else if (left > mid) return Query(left, right, idx << 1 | 1); else return max(Query(left, mid, idx << 1), Query(mid + 1, right, idx << 1 | 1)); } int main() { //freopen("data.txt", "r", stdin); int stuNums, queryNums; while (cin >> stuNums >> queryNums) { for (int i = 1; i <= stuNums; i++) cin >> num[i]; build(1, stuNums, 1); while (queryNums--) { char type; int num1, num2; cin >> type; cin >> num1 >> num2; if (num2 < stuNums) num2 += 1; if (num1 < stuNums) num1 += 1; switch (type) { case 'Q': printf("%d\n", Query(num1, num2, 1)); break; case 'U': update(num1, num2, 1); break; } } } return 0; }
相关文章推荐
- 华为机试题(一) 最高分是多少
- 华为机试::最高分是多少
- 华为机试----最高分是多少(线段树)
- 最高分是多少(线段树) 华为2016校园招聘
- 华为校招编程题02-最高分是多少
- 华为-最高分是多少-Java
- 牛客网---2016---华为最高分是多少
- 华为2016校园招聘上机笔试题1最高分是多少
- 华为机试:最高分是多少
- [华为机试] 最高分是多少
- 华为[编程题]最高分是多少
- 华为机试:最高分是多少
- 2016华为机试题1:最高分是多少
- 华为OJ题1---最大数是多少
- 华为笔试:最高分是多少(2016)
- 华为16机试(一):最高分是多少
- 最高分是多少(华为2016校招)
- 【华为2016上机试题C++】最高分是多少
- 华为机试---最高分是多少
- 华为机试--最高分是多少