线段树(单点更新,区间查询) HDU 1754 I Hate It
线段树的模板
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<cstdlib>
#include<cstring> using namespace std; const int Maxn = 2e6 + ;
int fa[Maxn];
struct node
{
int l, r;
int value;
int mid() {
return (l + r) / ;
}
}s[Maxn];
void build(int i, int l, int r)
{
s[i].l = l;
s[i].r = r;
s[i].value = ;
while (r == l) {
fa[l] = i;
return;
}
build(i * , l, (l + r) / );
build(i * + , (l + r) / + , r);
}
void updata(int x)
{
if (x == ) return;
int fi = x / ;
int a = s[fi * ].value;
int b = s[fi * + ].value;
s[fi].value = max(a, b);
updata(fi);
}
int Max;
void query(int i, int l, int r)
{
if (s[i].l == l && s[i].r == r) {
Max = max(Max, s[i].value);
return;
}
int m = s[i].mid();
if (r <= m) query(i << , l, r);
else if (l > m) query(i << | , l, r);
else {
query(i << , l, m);
query(i << | , m + , r);
} }
int main()
{
int n, m;
while (scanf("%d %d", &n, &m) == ) {
build(, , n);
for (int i = ;i <= n;i++) {
int x;
scanf("%d", &x);
s[fa[i]].value = x;
updata(fa[i]);
}
while (m--) {
char t[];
int a, b;
scanf("%s", t);
scanf("%d %d", &a, &b);
if (t[] == 'Q') {
Max = ;
query(, a, b);
printf("%d\n", Max);
}
else {
s[fa[a]].value = b;
updata(fa[a]);
}
}
}
return ;
}
线段树(单点更新,区间查询) HDU 1754 I Hate It的更多相关文章
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 -> Link1 <- -> Link2 <- 以上两题题意是一样 ...
- hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询
单点更新 区间查询 #include <bits/stdc++.h> using namespace std; #define m ((l+r)/2) #define ls (rt< ...
- HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1166(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- CDOJ 1073 线段树 单点更新+区间查询 水题
H - 秋实大哥与线段树 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit S ...
- Who Gets the Most Candies? POJ - 2886(线段树单点更新+区间查询+反素数)
预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了. 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置. 我们可以把所有人表示为一个[1,n]的区 ...
- NBUT 1602 Mod Three(线段树单点更新区间查询)
[1602] Mod Three 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Please help me to solve this problem, if so, Liang ...
- HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模
Multiply game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- 1018: Give me the answer
1018: Give me the answer 时间限制: 1 Sec 内存限制: 32 MB提交: 55 解决: 15[提交][状态][讨论版][命题人:外部导入] 题目描述 Farmer J ...
- input或其他元素的左上角和左下角单独圆角实现
border-bottom-left-radius:6px;/*左下角圆角*/ border-top-left-radius: 6px;/*左上角圆角*/
- Codeforces#498F. Xor-Paths(折半搜索)
time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standa ...
- HTML5一些标签和属性
<bdo> 元素 可以覆盖默认文本的方向 根据dir 属性来控制文字的排序方向 属性:dir="rtl" ...
- go get超时解决办法
go get gopkg.in/yaml.v2超时,发现被墙了,解决办法如下: 1.安装golang.org/x/net $ mkdir -p $GOPATH/src/golang.org/x/ $ ...
- 汇编:实现C语言的 ||与&&运算
;C程序转汇编(或运算链接) DATAS SEGMENT a Dw b dw cc dw d dw m dw n dw string db dup(?) DATAS ends CODES SEGMEN ...
- 《Redis设计与实现》- AOF持久化
1. AOF持久化 Redis AOF 持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的. 2. RDB持久化与AOF持久化的区别 RDB持久化 RDB持久化通过保存数据中的键值对来记 ...
- Redis 持久化操作
hash类型 类比:mysql数据库存储数据 持久化操作 以本身的数据以文件形式保存到硬盘中 手动快照持久化 i 备份机制(频率) vi redis.conf save 900 1 900s如果一个 ...
- 操作 Java 数组的 12 个最佳方法
1. 声明一个数组 Java代码: String[] aArray = new String[5]; String[] bArray = {"a","b",& ...
- Java 算法随笔(一)
1. 最大子序列和问题 给定(可能有负数)整数a(1).a(2).……a(n),求 a(1)+a(2)+……+a(j)的最大值. 也就是:在一系列整数中,找出连续的若干个整数,这若干个整数之和最大.有 ...