HDU 1754 I Hate It 线段树(单点更新,成段查询)

题目链接:

hdu: http://acm.hdu.edu.cn/showproblem.php?pid=1754

题解:

单点更新,成段查询。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #define lson o<<1
 6 #define rson (o<<1)|1
 7 #define M l+(r-l)/2
 8 using namespace std;
 9
10 const int maxn = 2e5 + 10;
11
12 int n, m;
13 int maxv[maxn<<2];
14
15 void build(int o, int l, int r) {
16     if (l == r) {
17         scanf("%d", maxv + o);
18     }
19     else {
20         build(lson, l, M);
21         build(rson, M + 1, r);
22         maxv[o] = max(maxv[lson], maxv[rson]);
23     }
24 }
25
26 int _po, _v;
27 void update(int o, int l, int r) {
28     if (l == r) {
29         maxv[o] = _v;
30     }
31     else {
32         if (_po <= M) update(lson, l, M);
33         else update(rson, M + 1, r);
34         maxv[o] = max(maxv[lson], maxv[rson]);
35     }
36 }
37
38 int ql,qr;
39 int _max;
40 void query(int o, int l, int r) {
41     if (ql <= l&&r <= qr) {
42         //printf("(%d,%d):%d\n", l, r,maxv[o]);
43         _max = max(_max, maxv[o]);
44     }
45     else {
46         //printf("(%d,%d):%d\n", l, r, maxv[o]);
47         if (ql <= M) query(lson, l, M);
48         if (qr > M) query(rson, M + 1, r);
49     }
50 }
51
52 int main() {
53     while (scanf("%d%d", &n, &m) == 2) {
54         build(1, 1, n);
55         char cmd[11];
56         while (m--) {
57             scanf("%s", cmd);
58             if (cmd[0] == ‘Q‘) {
59                 _max = -1;
60                 scanf("%d%d", &ql,&qr);
61                 query(1, 1, n);
62                 printf("%d\n", _max);
63             }
64             else if (cmd[0] == ‘U‘) {
65                 scanf("%d%d", &_po, &_v);
66                 update(1, 1, n);
67             }
68         }
69     }
70     return 0;
71 }
时间: 2024-12-26 20:25:38

HDU 1754 I Hate It 线段树(单点更新,成段查询)的相关文章

hdu 1754 I Hate It 线段树单点更新和区间求和

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 参照HH大牛写的额! Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题目包含多

HDU 1754 I Hate It 线段树单点更新求最大值

题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #define N 200005 using namespace std; int data[N]; struct Tree { int l,r,ans; }tree[N*4]; void build(in

hdu 1754 I Hate It (线段树单点更新)

http://acm.hdu.edu.cn/showproblem.php?pid=1754 照着hdu 1166 的模板稍加改动即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int sum[1000000]; void push(int rt) { sum[rt]=max(sum[rt<<1],s

HDU 1754 I Hate It 线段树 单点更新 区间最大值

1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vector> 9 #include<cstring> 10 #include<stack> 11 #

HDU 1754 I Hate It (线段树单点更新求最大值RMQ)

I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. Input 本题目包含多组测试,请处理到文件结束.在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目.学生ID编号分别从1

【HDU】1754 I hate it ——线段树 单点更新 区间最值

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 37448    Accepted Submission(s): 14816 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要

hdu-1166-敌兵布阵-线段树-单点更新,区域查询

线段树的单点更新,区域查询操作. #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> using namespace std; #define lmin 1 #define rmax n #define lson l,(l+r)/2,rt<<1 #define rson (l+r)/2+1,r,rt&l

HDU 1166 敌兵布阵(线段树单点更新,板子题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 87684    Accepted Submission(s): 36912 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

HDU - 3074 - Multiply game (线段树-单点更新,区间求积)

题目传送:Multiply game 思路:简单线段树,单点更新,区间求积,这是上次选拔赛选的题,一看题就是线段树,不过当时线段树不太熟,没敢敲,现在看来居然如此轻松,不过注意这里有大量输出,用printf,居然在这里TLE了一次... AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #incl