线段树
来源:互联网 发布:android入门编程视频 编辑:程序博客网 时间:2024/06/05 20:58
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int height[55555];
int maxx,minn;
struct p
{
int l,r;
int min,max;
}tree[4111111];
void build(int l,int r,int n)
{
tree[n].l=l;
tree[n].r=r;
if(l==r)
{
tree[n].max=tree[n].min=height[l];
return;
}
int mid=(l+r)/2;
build(l,mid,n*2);
build(mid+1,r,n*2+1);
tree[n].max=max(tree[n*2].max,tree[n*2+1].max);
tree[n].min=min(tree[n*2].min,tree[n*2+1].min);
}
void sql(int l,int r,int n)
{
if(l==tree[n].l&&r==tree[n].r)
{
maxx=max(tree[n].max,maxx);
minn=min(tree[n].min,minn);
return;
}
int mid=(tree[n].r+tree[n].l)/2;
if(l>mid)
sql(l,r,n*2+1);
else
if(r<=mid)
sql(l,r,2*n);
else
{
sql(l,mid,n*2);
sql(mid+1,r,n*2+1);
}
}
int main()
{
int n,q;
int i,j,k,l,m,r;
cin>>n>>q;
for(i=1;i<=n;i++)
scanf("%d",&height[i]);
build(1,n,1);
for(i=0;i<q;i++)
{
scanf("%d%d",&l,&r);
minn=999999999;
maxx=-minn;
sql(l,r,1);
printf("%d\n",maxx-minn);
}
return 0;
}
0 0
- 线段树?线段树!
- 线段树?线段树!
- 线段_线段树
- 线段_线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- 线段树
- Hello World
- 怎样才能不浪费生命
- 【原创】动态图像监测开源代码 motion 学习 ----- Motion源码分析(1)
- Machine Learning(Andrew)Week10(下)
- TOP 10开源的推荐系统简介
- 线段树
- leetcode: Path Sum
- HttpClient4.3教程 第三章 Http状态管理
- 导出excel,最前面数字0不见了
- SMTP发送
- Delphi中MessageBox用法
- MongoDB创始人:项目经理应该把30%的时间用在编程上
- the use of mmap
- 黑马程序员------毕老师视频笔记第六天------面向对象(static关键字)