博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdoj1754 线段树--单点更新
阅读量:4362 次
发布时间:2019-06-07

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

题目中文的,不解释了

维护一个最大值的线段树

1 #include 
2 3 #define lson l, m, rt<<1 4 #define rson m+1, r, rt<<1|1 5 6 const int maxn = 200000; 7 8 char cmd[2]; 9 int n, mNum, a, b, max[maxn<<2];10 11 int Max(int x, int y)12 {13 return (x>y ? x:y);14 }/* Max */15 16 void BuildTree(int l, int r, int rt)17 {18 if (l == r)19 {20 scanf("%d", &max[rt]);21 return ;22 }/* End of If */23 24 int m = (l+r)>>1;25 BuildTree(lson);26 BuildTree(rson);27 max[rt] = Max(max[rt<<1], max[rt<<1|1]); /* Push Up */28 }/* BuildTree */29 30 int Query(int L, int R, int l, int r, int rt)31 {32 if (L<=l && r<=R)33 return max[rt];34 35 int ret=-1, m=(l+r)>>1;36 37 if (L <= m)38 ret = Max(ret, Query(L, R, lson));39 if (R > m)40 ret = Max(ret, Query(L, R, rson));41 42 return ret;43 }/* Query */44 45 void UpData(int p, int bi, int l, int r, int rt)46 {47 if (l == r)48 {49 max[rt] = bi;50 return ;51 }/* End of If */52 53 int m = (l+r)>>1;54 55 if (p <= m)56 UpData(p, bi, lson);57 else58 UpData(p, bi, rson);59 60 max[rt] = Max(max[rt<<1], max[rt<<1|1]); /* Push Up */61 }/* UpData */62 63 int main()64 {65 while (~scanf("%d %d", &n, &mNum))66 {67 BuildTree(1, n, 1);68 for (int i=1; i<=mNum; ++i)69 {70 scanf("%s %d %d", cmd, &a, &b);71 if (cmd[0] == 'Q') /* Query */72 printf("%d\n", Query(a, b, 1, n, 1));73 else /* UpData */74 UpData(a, b, 1, n, 1);75 }76 }/* End of While */77 78 return 0;79 }

转载于:https://www.cnblogs.com/yewei/archive/2012/05/03/2480675.html

你可能感兴趣的文章
摄像头采集,264编码,live555直播(2)
查看>>
谷歌跨域
查看>>
使用葡萄城报表,轻松实现高度精准的报表套打
查看>>
Linux命令
查看>>
unicode ascii 互转 函数 C实现 MultiByteToWideChar/WideCharToMultiByte 详解
查看>>
大三第一学期实验报告
查看>>
mysql远程链接
查看>>
nginx location配置
查看>>
Easy Install详细参数
查看>>
选课系统
查看>>
最简实例演示asp.net5中用户认证和授权(2)
查看>>
ubuntu rhythmbox乱码解决方法
查看>>
LeetCode题解之Univalued Binary Tree
查看>>
线程池学习研究-(自实现)2
查看>>
ubuntu下安装新字体
查看>>
Django连接MySQL数据库
查看>>
漫游Kafka入门篇之简单介绍(1)
查看>>
redis学习之旅-初识Redis
查看>>
WinForm 小程序 NotePad
查看>>
JSTL 核心标签库 使用
查看>>