线段树模板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): 100523 Accepted Submission(s): 37845
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
6
5
9
分析:此题为经典线段树模板题, 标志性的更新和查询操作, 如果无数条更新和查询操作时, 想到线段树, 很可能就是一道与此题类似的线段树题欧。。
ac代码:
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- const int N=+;
- struct tree{
- int l, r, maxn;
- };
- tree t[N*];
- int ans;
- void build(int m, int l, int r)
- {
- t[m].l = l;
- t[m].r = r;
- if(l==r)
- {
- scanf("%d", &t[m].maxn);
- return;
- }
- int mid = (l + r) >> ;
- build(m<<, l, mid);
- build(m<<|, mid+, r);
- t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
- }
- void U(int m, int a, int b)
- {
- if(t[m].l == t[m].r && t[m].l == a)
- {
- t[m].maxn = b;
- return;
- }
- int mid = (t[m].l + t[m].r) >> ;
- if(a <= mid)
- U(m<<, a, b);
- else
- U(m<<|, a, b);
- t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
- }
- void Q(int m, int l, int r)
- {
- if(t[m].l == l && t[m].r == r)
- {
- ans = max(ans, t[m].maxn);
- return;
- }
- int mid = (t[m].l + t[m].r) >> ;
- if(r <= mid)
- Q(m<<, l, r);
- else if(l >= mid + )
- Q(m<<|, l, r);
- else
- {
- Q(m<<, l, mid);
- Q(m<<|, mid+, r);
- }
- }
- int main()
- {
- int n, m;
- while(scanf("%d%d", &n, &m)!=EOF)
- {
- build(, , n);
- for(int i=;i<m;i++)
- {
- getchar();
- char c;
- int a, b;
- scanf("%c", &c);
- scanf("%d%d", &a, &b);
- if(c == 'Q')
- {
- ans = ;
- Q(, a, b);
- printf("%d\n", ans);
- }
- else
- U(, a, b);
- }
- }
- return ;
- }
线段树模板hdu 1754:I Hate It的更多相关文章
- 线段树模板 hdu 1166 敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 线段树(hdu 1754 i hate it)
I Hate It Time Limit: 3000MS Memory Limit: 32768 K Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分 ...
- 线段树模板hdu 1166:敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 裸裸的线段树(hdu 1754)
线段树的第一发. 哪天忘了还能够让自己找找回顾. 线段树操作: build : 建树. update:点改动: query:查询 Input 在每一个測试的第一行,有两个正整数 N 和 M ( 0& ...
- hdu 4819 二维线段树模板
/* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- HDU 1698 Just a Hook (线段树模板题-区间求和)
Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...
- HDU1166:敌兵布阵(线段树模板)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
随机推荐
- python--自己实现的单链表常用功能
最近一个月,就耗在这上面吧. 很有收获的. # coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = ...
- 将input或textarea设置为disabled的样式问题
input:disabled{ -webkit-text-fill-color: #333;//是用来做填充色使用的 -webkit-opacity: 1; color: #333; } textar ...
- web实现下拉列表多选加搜索
实现如图所示的下拉多选还能带有搜索功能. <!DOCTYPE html> <html> <head> <title></title> < ...
- html5的audio实现高仿微信语音播放效果Demo
HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- PHP加密解密方法,使用openssl加密解密
/** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...
- linux中查看http各种状态数量
转自: http://www.cnblogs.com/wayne173/p/5652043.html 我们的网站部署在linux的服务器上,特别是web服务器,我们可能有时候做为运维人员,肯定是要查看 ...
- Manager解决Process进程之间的数据访问
import multiprocessing mgr = mutiprocessing.Manager() 开启一个守护子进程,并返回用来与其通信的管理器 share_list = mgr.list( ...
- 富文本编辑器上传图片需要配置js,后台代码
富文本编辑器上传图片需要配置js,后台代码
- SORT--不要仅限于题目中
输入n,m 表示输入n个数输出前m个最大的数 Input The input file contains many test cases. Each case has 2 lines. The fir ...
- MySql与python交互
No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...