博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1754 I Hate It(线段树基本操作)
阅读量:5255 次
发布时间:2019-06-14

本文共 1540 字,大约阅读时间需要 5 分钟。

思路:

线段树的基本操作:单点替换,区间最值

#include 
#include
#include
#include
using namespace std;#define lhs l, m, rt << 1#define rhs m + 1, r, rt << 1 | 1const int maxn = 200010;int seg[maxn << 2];void pushUp(int rt){
seg[rt] = max(seg[rt << 1], seg[rt << 1 | 1]);}void build(int l, int r, int rt){
if (l == r) {
scanf("%d", &seg[rt]); return; } int m = (l + r) >> 1; build(lhs); build(rhs); pushUp(rt);}void update(int p, int delta, int l, int r, int rt){
if (l == r) {
seg[rt] = delta; return; } int m = (l + r) >> 1; if (p <= m) update(p, delta, lhs); else update(p, delta, rhs); pushUp(rt);}int query(int beg, int end, int l, int r, int rt){
if (beg <= l && r <= end) return seg[rt]; int m = (l + r) >> 1; int ret = 0; if (beg <= m) ret = query(beg, end, lhs); if (end > m) ret = max(ret, query(beg, end, rhs)); return ret;}int main(){
int n, m; while (scanf("%d %d", &n, &m) != EOF) {
build(1, n, 1); while (m--) {
char op[16]; int a, b; scanf("%s", op); scanf("%d %d", &a, &b); if (op[0] == 'Q') printf("%d\n", query(a, b, 1, n, 1)); else if (op[0] == 'U') update(a, b, 1, n, 1); } } return 0;}

转载于:https://www.cnblogs.com/kedebug/archive/2013/01/11/2856178.html

你可能感兴趣的文章
堆排序算法原理
查看>>
java 跨数据库导入大数据
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
crypto加密
查看>>
Apache Jackrabbit 2.6.0 发布
查看>>
echarts饼图显示百分比
查看>>
C#中的out string temp是什么意思?【转】
查看>>
第十二次作业
查看>>
喜欢的话
查看>>
JMS消息
查看>>
16位整数,32位整数,64位整数
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
Jenkins里邮件插件触发器配置和Send to Developers到底是什么意思(转)
查看>>
angular/cli安装
查看>>
网页记账本开发三
查看>>
11gR1 Patchset 2 ~ 11.1.1.3.0 (SOA) features ..
查看>>
Hdu 1708 Fibonacci String
查看>>
java lock锁住特定对象
查看>>
JAX-WS 访问SSL 的WebService 老是HTTP transport error: Connection refused错误的解决办法。...
查看>>