I Hate It:线段树:单点修改+区间查询
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 40034 Accepted Submission(s): 15898
Problem Description
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
在每个测试的第一行,有两个正整数 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。
Output
Sample Input
Sample Output
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
const int MX = 200010; //注意最大值 struct node {
int l, r, maxn,minn;
}tree[MX<<2];
int n, q, x, y; void pushup(int p) { //单点更新
tree[p].maxn = max(tree[p << 1].maxn, tree[p << 1 | 1].maxn);
// tree[p].minn = min(tree[p << 1].minn, tree[p << 1 | 1].minn);
} void built(int p, int l, int r) { //建树
tree[p].l = l;
tree[p].r = r;
if (l == r) {
scanf("%d", &tree[p].maxn);
// tree[p].minn = tree[p].maxn;
return;
}
int mid = l + r >> 1;
built(p << 1, l, mid);
built(p << 1 | 1, mid + 1, r);
pushup(p);
} void update(int p, int a, int a1) { //单点修改
if (tree[p].l==tree[p].r) {
tree[p].maxn = a1;
return;
}
int mid = tree[p].l + tree[p].r >> 1;
if (a <= mid)
update(p << 1, a, a1);
else
update(p << 1 | 1, a, a1);
pushup(p);
} int querymax(int p, int l, int r) { //区间查询
int res = 0;
if (l <= tree[p].l&&tree[p].r <= r) {
return tree[p].maxn;
} int mid = tree[p].l + tree[p].r >> 1;
if (l <= mid)res=max(res,querymax(p << 1, l, r));
if (r > mid)res = max(res, querymax(p << 1 | 1, l, r));
return res;
} //int querymin(int p, int l, int r) {
// int res = 9999999;
// if (l <= tree[p].l&&tree[p].r <= r) {
// return tree[p].minn;
// }
//
// int mid = tree[p].l + tree[p].r >> 1;
// if (l <= mid)res = min(res, querymin(p << 1, l, r));
// if (r > mid)res = min(res, querymin(p << 1 | 1, l, r));
// return res;
//} int main() {
while (scanf("%d%d", &n, &q) != EOF) {
built(1, 1, n);
while (q--) {
char s[2];
scanf("%s%d%d", s, &x, &y);
getchar();
if (s[0] == 'Q')
printf("%d\n", querymax(1, x, y));
else
update(1, x, y);
}
}
return 0;
}
I Hate It:线段树:单点修改+区间查询的更多相关文章
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- POJ 3321 Apple Tree(DFS序+线段树单点修改区间查询)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25904 Accepted: 7682 Descr ...
- I Hate It(线段树点修改区间查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others) ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- Ocean的礼物(线段树单点修改)
题目链接:http://oj.ismdeep.com/contest/Problem?id=1284&pid=0 A: Ocean的礼物 Time Limit: 5 s Memory ...
- NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 -> Link1 <- -> Link2 <- 以上两题题意是一样 ...
- 校内模拟赛T5:连续的“包含”子串长度( nekameleoni?) —— 线段树单点修改,区间查询 + 尺取法合并
nekameleoni 区间查询和修改 给定N,K,M(N个整数序列,范围1~K,M次查询或修改) 如果是修改,则输入三个数,第一个数为1代表修改,第二个数为将N个数中第i个数做修改,第三个数为修改成 ...
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- [线段树]区间修改&区间查询问题
区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...
- HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
随机推荐
- UIButtonType各个类型的解释:
UIButtonType各个类型的解释: typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = , UIButtonTypeS ...
- iOS:CALayer(17-12-06更)
目录 1.CALayer(父类) 2.CAShapeLayer(形状/画布) 3.CAEmitterLayer(粒子发射层) 4.CAGradientLayer(渐变层) 5.CATransformL ...
- GitHub Desktop 拉取 GitHub上 Tag 版本代码
一直在使用 GitHub Desktop 图形化 git 管理工具,统一项目框架版本时需要切换到ThinkPHP Tag 分支版本,步骤如下, 1,先在 GitHub 中找到需要的版本,点进去 2,点 ...
- 浏览器端用JS实现创建和下载图片
问题场景 在前端很多的项目中,文件下载的需求很常见.尤其是通过JS生成文件内容,然后通过浏览器端执行下载的操作.如图片,Execl 等的导出功能.日前,项目中就遇到了这类需求,在浏览器端实现保存当前网 ...
- PHP对接QQ互联,超级详细!!!
SDK下载
- PHP curl 携带cookie请求抓取源码,模拟登陆。
公司需要采集一批手机号码,有指定网站.但是需要登陆后才能看到客户号码,手动点击复制太慢,如此就写了以下模拟登陆采集号码程序,分享给大家参考参考. function request_url_data($ ...
- 转载:CSS的组成,三种样式(内联式,嵌入式,外部式),优先级
(仅供自己备份) 原文地址:http://blog.csdn.net/chq11106004389/article/details/50515717 CSS的组成 选择符/选择器+声明(属性+值) 选 ...
- python神坑系列之深浅拷贝
深浅拷贝 1.注意在拷贝中只有使用了.deepcopy方法才能进行深度拷贝!其余的一律是浅拷贝 #深拷贝import copy lst = copy.deepcopy(lst1) 浅拷贝: 拷贝的是 ...
- 《JQuery常用插件教程》系列分享专栏
<JQuery常用插件教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201719.html 文章 使用jquery插件实现图 ...
- c. 求阶乘和的方法(N的值不能太大)初学者
#include <stdio.h> int main() { int n,i; int a=1; //a设置为一个数的阶乘 int b; // b 设置为阶乘的和 for(i ...