HDU - 1754 I Hate It (线段树)
来源:互联网 发布:电子元件查询软件 app 编辑:程序博客网 时间:2024/06/03 18:38
解析:线段树模板题,线段树单点更新,找出区间最大值和更改区间点的值。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 200000;int a[N];int s[N << 2], L[N << 2], R[N << 2];void build(int u,int l,int r) {if(l == r) {L[u] = R[u] = l;s[u] = a[l];return ;}int mid = (l + r) / 2;build(u*2,l,mid);build(u*2+1,mid+1,r);L[u] = l;R[u] = r;s[u] = max(s[u*2],s[u*2+1]);}void modify(int u,int x,int v) {if(R[u] == x && L[u] == x) {//叶子节点,找到结果返回s[u] = v;return ;}int mid = (L[u] + R[u]) / 2;if(x <= mid) {modify(u*2,x,v);}else {modify(u*2+1,x,v);}s[u] = max(s[u*2],s[u*2+1]);}int query(int u,int l,int r) {if(l <= L[u] && R[u] <= r) {return s[u];}int mid = (L[u] + R[u]) / 2;int ret = -N;if(l <= mid) {ret = max(ret,query(u*2,l,r));}if(r > mid) {ret = max(ret,query(u*2+1,l,r));}return ret;}int main() {int m,n;int x,y;while(scanf("%d%d",&n,&m) != EOF) {for(int i = 1; i <= n; i++) {scanf("%d",&a[i]);}memset(s,0,sizeof(s));L[1] = 1;R[1] = n;build(1,L[1],R[1]);char cmd[3];while(m--) {scanf("%s",cmd);if(cmd[0] == 'Q') {scanf("%d%d",&x,&y);printf("%d\n",query(1,x,y));}else if(cmd[0] == 'U') {scanf("%d%d",&x,&y);modify(1,x,y);}}}return 0;}
0 0
- HDU 1754 I Hate It 线段树
- [hdu] 1754 I hate it -- 线段树
- hdu 1754 -- I Hate It (线段树)
- HDU 1754 I Hate It 线段树
- 线段树 hdu 1754 I Hate It
- HDU 1754 I Hate It(线段树)
- hdu 1754 (线段树)I Hate It
- hdu-1754 I Hate It 线段树
- HDU--1754 -- I Hate It [线段树]
- 【线段树】hdu 1754 I hate it
- hdu - 1754 I Hate It(线段树)
- HDU--1754--I Hate It--线段树
- HDU-1754 I Hate It 线段树
- hdu 1754 I Hate It 线段树
- HDU-1754-I Hate It(线段树)
- HDU 1754 I Hate It (线段树)
- hdu 1754 I hate it(线段树)
- 【HDU】 1754 I Hate It 线段树
- Think in OO(1)
- C语言编程(练习5:循环,三大循环结构 )
- win8 系统安装python 2.7 【问题解决】--mindfusion 解决--2-5
- java内存溢出跟踪解决思路
- 两个高斯函数的卷积仍为一高斯函数
- HDU - 1754 I Hate It (线段树)
- 【C语言】逆转二进制数的几种方法
- 火狐浏览器禁止javaScript
- MySQL系列:innodb源码分析之page结构解析
- java解惑之表达式之谜(谜题3)
- 嵌入式的没落
- TEST
- hdu_2072_统计单词数_set_检测字符串
- 【C语言】二分查找法