hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
Huge input,the C function scanf() will work better than cin
#include<cstdio>
#include<algorithm>
using namespace std;#define lson l, mid, root<<1
#define rson mid+1, r, root<<1|1const int N = 2000000 + 50;
struct node
{int l, r, mmax;
}a[4*N];void build_tree(int l, int r, int root)
{a[root].l = l;a[root].r = r;if(l == r){scanf("%d",&a[root].mmax);return ;}int mid = (l + r) >> 1;build_tree(lson);build_tree(rson);a[root].mmax = max(a[root<<1].mmax, a[root<<1|1].mmax);
}void update(int l, int r, int root, int k)
{if(l == a[root].l && r == a[root].r){a[root].mmax = k;return;}int mid = (a[root].l + a[root].r) >> 1;if(r <= mid)update(l, r, root<<1, k);else if(l > mid)update(l, r, root<<1|1, k);else{update(lson, k);update(rson, k);}a[root].mmax = max(a[root<<1].mmax, a[root<<1|1].mmax); //更新完单个点之后更新整棵树
}int Query(int l, int r, int root)
{if(l == a[root].l && r == a[root].r)return a[root].mmax;int mid = (a[root].l + a[root].r) >> 1;if(r <= mid)return Query(l, r, root<<1);else if(l > mid)return Query(l, r, root<<1|1);elsereturn max(Query(lson), Query(rson));
}int main()
{int n, m, a, b;char ch[5];while(~scanf("%d%d",&n,&m)){build_tree(1, n, 1);while(m--){getchar();scanf("%s%d%d",ch, &a, &b);if(ch[0] == 'Q')printf("%d\n",Query(a, b, 1));elseupdate(a, a, 1, b);}}return 0;
}
hdu 1754 I Hate It(线段树之 单点更新+区间最值)相关推荐
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
敌兵布阵 Time Limit: 2000/10 ...
- HDU 1754 I hate it【线段树之单点替换区间最值】
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...
- hdu 敌兵布阵(线段树之单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 线段树之单点更新,区域求和
线段树之单点更新,区域求和 今天在coreforces上做的一题 E. DZY Loves Fibonacci Numbers time limit per test 4 seconds memory ...
- Codeforces Beta Round #75 (Div. 1 Only) B. Queue 线段树。单点更新
http://codeforces.com/problemset/problem/91/B 题意: 给你n个数,求得i 到n中小于a[i]的最右边的a[j],然后求a[i]到a[j]之间包含了多少个数 ...
- [ACM] hdu 1754 I Hate It (线段树,单点更新)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1754 I Hate It 线段树
I Hate It Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...
- HDU 1394 Minimum Inversion Number(线段树的单点更新)
点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...
最新文章
- Apache htaccess 重写假设文件存在!
- Lua中的基本函数库
- Linux系统初学者指南,观点|Linux 系统调用的初学者指南
- sqlite插入时间字段_sqlite 获取最后插入id
- 【腾讯游戏面试题】面向对象的设计原则是什么?
- python 获取天气_Python实现从百度API获取天气的方法
- Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素
- 最大熵模型与EM算法及python实现
- 物联网的体系结构分为_初学物联网信息安全、3
- 二叉树遍历算法的应用
- mybatis日志在线生成sql(日志参数填充,sql日志格式化)
- WebRTC APM
- C++跟C#获取电脑上连接的多个摄像头名称与编号
- MySQL基础 创建学生表实现查询基础功能
- windows 下的CACTI的安装方法
- 组织人事类主数据业务梳理以及流程编排
- 地中海?修电脑的?格子衫?那些对程序员的高级黑!!!
- 手机与存储卡空间大小剩余怎么获取
- java runnable main_【BUG】”main” prio=5 tid=1 RUNNABLE
- JDK8下载及安装教程之windows版、linux版