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