POJ
来源:互联网 发布:07版excel编程入门教程 编辑:程序博客网 时间:2024/05/19 06:47
#include<stdio.h>int a[200000];struct node{ int maxx,minn;}s[800000];int max(int a,int b){ if(a>b) return a; return b;}int min(int a,int b){ if(a<b) return a; return b;}void build(int id,int l,int r){ if(l==r){ s[id].maxx=a[l]; s[id].minn=a[l];// printf("%d %d\n",id,s[id].minn); return; } int mid=(l+r)>>1; build(id*2,l,mid); build(id*2+1,mid+1,r); s[id].maxx=max(s[id*2].maxx,s[id*2+1].maxx); s[id].minn=min(s[id*2].minn,s[id*2+1].minn);}int QueryMax(int id,int ll,int rr,int l,int r){ if(l<=ll&&rr<=r){ // printf("%d %d %d %d\n",id,s[id].maxx,ll,rr); return s[id].maxx; } int mid=(ll+rr)>>1; if(r<=mid) return QueryMax(id*2,ll,mid,l,r); else if(l>mid) return QueryMax(id*2+1,mid+1,rr,l,r); else return max(QueryMax(id*2,ll,mid,l,r),QueryMax(id*2+1,mid+1,rr,l,r));}int QueryMin(int id,int ll,int rr,int l,int r){ if(l<=ll&&rr<=r){ return s[id].minn; } int mid=(ll+rr)>>1; if(r<=mid) return QueryMin(id*2,ll,mid,l,r); else if(l>mid) return QueryMin(id*2+1,mid+1,rr,l,r); else return min(QueryMin(id*2,ll,mid,l,r),QueryMin(id*2+1,mid+1,rr,l,r));}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++) scanf("%d",a+i); build(1,1,n); while(m--){ int l,r; scanf("%d%d",&l,&r); printf("%d\n",QueryMax(1,1,n,l,r)-QueryMin(1,1,n,l,r)); } return 0; }}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 线性表的 赋值,插入,与元素的删除
- Linux下的进度条程序
- HDMI信号解析
- python----模块(库)初识(一)
- Android View的layout_width属性是如何解析的
- POJ
- JavaScript中最大值最小值问题
- 上下界网络流
- 世界是不公平的,唯有感受是私有
- KMP模式匹配算法
- C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码
- Java/C++实现快速排序
- ubuntu16.0源码编译opencv3.3.0
- 63 Unique Paths II