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

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

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int MAXN=2e5+10; 8 #define lson l,m,i<<1 9 #define rson m+1,r,i<<1|110 typedef struct Node11 {12 int l,r;13 int mid()14 {15 return (l+r)/2.0;16 }17 int value;18 } Node;19 Node node[MAXN<<2];20 void push_up(int i)21 {22 node[i].value=max(node[i<<1].value,node[i<<1|1].value);23 }24 void Build(int l,int r,int i)25 {26 node[i].l=l;27 node[i].r=r;28 node[i].value=0;29 if(l==r)30 {31 scanf("%d",&node[i].value);32 return ;33 }34 int m=node[i].mid();35 Build(lson);36 Build(rson);37 push_up(i);38 }39 int M;40 void query(int l,int r,int i)41 {42 if(node[i].l==l&&node[i].r==r)43 {44 M=max(node[i].value,M);45 return;46 }47 int m=node[i].mid();48 if(r<=m)49 query(l,r,i<<1);50 else51 {52 if(l>m)53 query(l,r,i<<1|1);54 else55 {56 query(lson);57 query(rson);58 }59 }60 }61 void update(int l,int r,int i,int v,int num)62 {63 if(l==r&&l==num)64 {65 node[i].value=v;66 return;67 }68 int m=node[i].mid();69 if(m>=num)70 update(l,m,i<<1,v,num);71 else72 {73 update(m+1,r,i<<1|1,v,num);74 }75 push_up(i);76 }77 int main()78 {79 int m,n,a,b;80 char s[1234];81 while(scanf("%d%d",&n,&m)!=-1)82 {83 Build(1,n,1);84 while(m--)85 {86 scanf(" %s%d%d",&s,&a,&b);87 if(s[0]=='Q')88 {89 M=0;90 query(a,b,1);91 cout<
<
View Code

 

转载于:https://www.cnblogs.com/moomcake/p/9409668.html

你可能感兴趣的文章
python-三级菜单和购物车程序
查看>>
条件断点 符号断点
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
Java基础教程——网络基础知识
查看>>
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>