线段树 HDU-1754 I Hate It

时间:2022-12-31 12:06:26

附上原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

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
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
 
Sample Output
5
6
5
9

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这是一个单点更新、区间查询的线段树,AC代码如下:

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxi = ;
int segTree[maxi<<];
int arr[maxi]; void PushUp(int node) {
segTree[node] = max(segTree[node<<], segTree[node<<|]);
} void build(int node, int l, int r) {
if(l==r) segTree[node] = arr[l];
else {
int mid = (l+r)>>;
build(node<<, l, mid);
build(node<<|, mid+, r);
PushUp(node);
}
} int query(int node, int l, int r, int L, int R) {
if(L<=l && r<=R) return segTree[node];
int mid = (l+r)>>, ans = ;
if(L<=mid) ans = max(ans, query(node<<, l, mid, L, R));
if(R>=mid+) ans = max(ans, query(node<<|, mid+, r, L, R));
return ans;
} void update(int node, int l, int r, int c, int d) {
if(l==r) segTree[node] = d;
else {
int mid = (l+r)>>;
if(c <= mid) update(node<<,l,mid,c,d);
else update(node<<|,mid+,r,c,d);
PushUp(node);
}
} int main() {
int n,m;
while(~scanf("%d %d",&n,&m)) {
memset(segTree,, sizeof(segTree));
for(int i =; i <= n; i++) {
scanf("%d",&arr[i]);
getchar();
}
build(,,n);
while(m--) {
int a,b;
char c;
scanf("%c %d %d",&c,&a,&b);
getchar();
if(c=='Q') printf("%d\n",query(,,n,a,b));
else update(,,n,a,b);
}
}
return ;
}

希望有所帮助~ 谢谢

线段树 HDU-1754 I Hate It的更多相关文章

  1. 主席树&lbrack;可持久化线段树&rsqb;&lpar;hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F&colon;Pathwalks &rpar;

    在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...

  2. 最大矩阵覆盖权值--&lpar;静态连续最大子段 &lpar;线段树&rpar; &rpar;-HDU&lpar;6638&rpar;Snowy Smile

    这题是杭电多校2019第六场的题目 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你平面上n个点,每个点都有权值(有负权),让你计算一 ...

  3. 敌兵布阵&lpar;线段树HDU 1166&rpar;

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  4. HDU 6464 权值线段树 &amp&semi;&amp&semi; HDU 6468 思维题

    免费送气球 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  5. 区间第k大问题 权值线段树 hdu 5249

    先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...

  6. 线段树 HDU 3397(真)

    5 种操作  0 1 然后 异或 似乎这种2个更新的先后每次都搞不清 覆盖有覆盖就可以不异或 也不知道为什么 #include<stdio.h> #include<string.h& ...

  7. 线段树 HDU 3397

    5种操作 具体看代码 #include<iostream> #include<stdio.h> #include<string.h> #include<alg ...

  8. 线段树 HDU 3308

    t 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y   2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 #include< ...

  9. 二维线段树 HDU 1823最简单的入门题

    xiaoz 征婚,首先输入M,表示有M个操作. 借下来M行,对每一行   Ih a l     I 表示有一个MM报名,H是高度, a是活泼度,L是缘分. 或   Q h1 h2 a1 a2    求 ...

  10. bzoj 3038&colon; 上帝造题的七分钟2 线段树&vert;&vert;hdu 4027

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1066  Solved: 476[Submit][Status][Dis ...

随机推荐

  1. &period;NET Core RC2发布在即,我们试着用记事本编写一个ASP&period;NET Core RC2 MVC程序

    在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用.由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所 ...

  2. 通过向页面写html代码导出excel

    //excel文件名 string filename = "考勤汇总"; StringBuilder ExcelHtml = new StringBuilder(); ExcelH ...

  3. &lbrack;LeetCode&rsqb; Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  4. eclipse进行编译时总是有javascript validator错误提示

    右击工程项目的properties——builders——去掉对javascript的验证就ok啦

  5. C&num; 生成中间含有LOGO的二维码

    效果如下: 1.无LOGO的二维码: 2.含有LOGO的二维码: 一.下载QrCode程序集: 使用的程序集有: 下载地址: http://zxingnet.codeplex.com/ 二.QRCod ...

  6. 本人的cocos2d-x之路

        大学基本上算是混着过去了- -,说起学到的东西,感觉真的不多.然后吧.在大四这年在大妈的带动下,来到了一家棋牌游戏公司,详细就不说了.刚进去的时候真的是啥也不懂.先是看了项目代码,自己捉摸了1 ...

  7. android屏蔽home键的实现

    Android中,网上很多屏蔽Home键都智能在4.0以下运行,在4.0以及以上运行直接崩溃. 需要这样更改(来源:http://androidmaster.iteye.com/): @Overrid ...

  8. Chrome 禁止从页面打开 Data URI 网址了

    现如今,网民的网络账户被盗,很有可能是被“钓鱼”了.去年的一份安全报告中指出:“近85%的资金损失是通过钓鱼网址泄露支付信息造成的”. 传统的钓鱼网站通常是申请一个和被冒充网站相似的域名,比如 tao ...

  9. 第二十六篇&colon;USB3&period;0高带宽ISO&lpar;48KBytes&sol;125us&rpar;实战

    USB3.1技术已经推出, 10Gbps的速率足以满足数据, HD视频传输的要求. 要步入USB3.1的研发, 还得将USB3.0的基础打扎实. 微软提供的SUPER MUTT仅仅包括一个接口0, 其 ...

  10. 数组中&amp&semi;a与&amp&semi;a&lbrack;0&rsqb;的区别 转载自http&colon;&sol;&sol;blog&period;csdn&period;net&sol;FX677588&sol;article&sol;details&sol;74857473

    在探讨这个问题之前,我们首先来看一道笔试题,如下: [摘自牛客网]下列代码的结果是:(正确答案是 C) main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)( ...