基础线段树

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 200010
#define lson p<<1
#define rson p<<1|1
struct NOD
{
int l,r;
int best;
} node[maxn<<];
void build(int l,int r,int p)
{
node[p].l = l,node[p].r = r;
if(l == r)
{
scanf("%d",&node[p].best);
return;
}
int mid = (l+r) >> ;
build(l,mid,lson);
build(mid+,r,rson);
node[p].best = max(node[lson].best,node[rson].best);
}
int ask(int l,int r,int p)
{
if(node[p].l == l && node[p].r == r)
{
return node[p].best;
}
int mid = (node[p].l+node[p].r)>>;
if(r <= mid)
return ask(l,r,lson);
else if(l >= mid+)
return ask(l,r,rson);
else return max(ask(l,mid,lson),ask(mid+,r,rson));
}
void updata(int id,int num,int p)
{
if(node[p].l==node[p].r && node[p].l == id)
{
node[p].best = num;
return;
}
int mid = (node[p].l+node[p].r) >> ;
if(id <= mid)
updata(id,num,lson);
else if(id > mid) updata(id,num,rson);
node[p].best = max(node[lson].best,node[rson].best);
}
int main()
{
int n,m;
while(EOF!=scanf("%d%d",&n,&m))
{
build(,n,);
while(m--)
{
char op[];
scanf("%s",op);
if(op[] == 'Q')
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",ask(l,r,));
}
else
{
int id,num;
scanf("%d%d",&id,&num);
updata(id,num,);
}
}
}
return ;
}

最新文章

  1. Fabric远程自动化使用说明
  2. android dialog 有关token的问题
  3. Xcode 7 调试野指针利器 Address sanitizer
  4. java课后作业
  5. CCLabel在最大宽度已知的情况下如何获取实际宽高
  6. Bootstrap的学习以及简单运用
  7. 开发框架XUtils
  8. Lambda 表达式型的排序法
  9. HW3.6
  10. AIX5.3CPU占用高的问题核查
  11. POJ 2758 Checking the Text(Hash+二分答案)
  12. ThinkPHP 3.2 开发过程
  13. PrefixSpan算法原理总结
  14. C# 使用正则表达式去掉字符串中的数字
  15. Re.常系数齐次递推
  16. XAMPP本地服务器打不开解决方案
  17. NET操作RabbitMQ组件EasyNetQ
  18. python爬虫+使用cookie登录豆瓣
  19. BZOJ4326或洛谷2680 运输计划
  20. c++11日志练习

热门文章

  1. java中的静态初始化块
  2. [转]关于Socket粘包问题
  3. Golang: pprof
  4. php过滤函数
  5. 一篇很全面的freemarker教程 前端工程师必备
  6. ILMerge 简单使用
  7. div+css网页本地上和上传到服务器后在IE11上看到的效果不一样?
  8. TcpClient 读写流
  9. js框架——angular.js(3)
  10. java Future模式