【题目链接】 http://poj.org/problem?id=3264

【题目大意】

  求区间最大值和最小值的差值

【题解】

  线段树维护区间极值即可

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <climits>
using namespace std;
const int N=1000010;
int T[N*4],C[N*4],n,M,m;
struct data{int v,x;}p[N];
long long ans;
bool cmp(data a,data b){return a.v<b.v;}
void add(int x,int y){
T[x+=M]=y; C[x]=y;
for(x/=2;x;x/=2){
T[x]=max(T[x<<1],T[(x<<1)^1]);
C[x]=min(C[x<<1],C[(x<<1)^1]);
}
}
int query(int x,int y){
int t=INT_MIN,c=INT_MAX;
x+=M-1;y+=M+1;
while(x^y^1>0){
if(~x&1)t=max(T[x+1],t),c=min(C[x+1],c);
if(y&1)t=max(T[y-1],t),c=min(C[y-1],c);
x>>=1;y>>=1;
}return t-c;
}
int main(){
scanf("%d%d",&n,&m);
for(M=1;M<n;M<<=1);
for(int i=0;i<=M+n;i++)C[i]=INT_MAX,T[i]=INT_MIN;
for(int i=1;i<=n;i++){
int x; scanf("%d",&x);
add(i,x);
}
while(m--){
int l,r; scanf("%d%d",&l,&r);
printf("%d\n",query(l,r));
}return 0;
}

最新文章

  1. Excel—分离中英文字符
  2. C# winform中读取HTML代码
  3. 浅谈产品测试人员的KPI
  4. 树形DP(统计直径的条数 HDU3534)
  5. HDU1556-color the ball(线段树)
  6. 转:ASP.NET MVC中Unobtrusive Ajax的妙用
  7. HDOJ/HDU 2565 放大的X(分段思考~)
  8. APP界面设计之页面布局的22条基本原则
  9. wpf在异步中给前台赋值
  10. UVa 11069 - A Graph Problem
  11. 遍历Javascript数组的一种方法!
  12. 【第三篇】Volley图片加载之NetworkImageView代码分析
  13. C#仪器数据文件解析-XPS文件
  14. C#的改进特性
  15. FTP环境搭建及客户代码调用公共方法封装
  16. Spring Boot 2.x 编写 RESTful API (三) 程序层次 &amp; 数据传输
  17. kali ssh远程连接过程
  18. Android 视频播放器 (一):使用VideoView播放视频
  19. tomcat容器是如何创建servlet类实例?用到了什么原理?
  20. 【转】Max2013脚本工具的乱码问题

热门文章

  1. 关于Ckpalyer播放器的MP4无法播放问题
  2. 1、shader简介、渲染管线
  3. Application_Start事件中用Timer做一个循环任务
  4. User namespace
  5. 【bzoj2662】[BeiJing wc2012]冻结 分层图Spfa
  6. 29个android开发常用的类、方法及接口
  7. 【Luogu】P3228数列(数学题)
  8. IPV6地址格式分析
  9. 关于spark RDD trans action算子、lineage、宽窄依赖详解
  10. [poj] 2549 Sumsets || 双向bfs