POJ-3264 RMQ
2011-11-21 19:56
197 查看
NOIP2011 2=收场,悲剧。
“长风破浪会有时,直挂云帆济沧海”
AC 3000+ms
/**
** poj-3264 balanced lineup
** mike-w
** 2011-11-21
** tag: RMQ
**/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LIST_SIZE 100000
#define MAX_EXP 100
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
int list[LIST_SIZE];
int rmin[LIST_SIZE][MAX_EXP],rmax[LIST_SIZE][MAX_EXP];
int N,Q;
int mktable(void)
{
int i,j;
for(i=1;i<=N;i++)
rmin[i][0]=rmax[i][0]=list[i];
for(j=1;j<=log(N)/log(2);j++)
for(i=1;i+(1<<j)-1<=N;i++)
{
rmin[i][j]=min(rmin[i][j-1],rmin[i+(1<<(j-1))][j-1]);
rmax[i][j]=max(rmax[i][j-1],rmax[i+(1<<(j-1))][j-1]);
}
return 0;
}
int rmq1(int l,int r)
{
int x=log(r-l+1)/log(2);
return max(rmax[l][x],rmax[r+1-(1<<x)][x]);
}
int rmq2(int l,int r)
{
int x=log(r-l+1)/log(2);
return min(rmin[l][x],rmin[r+1-(1<<x)][x]);
}
int main(void)
{
int i,a,b;
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
scanf("%d%d",&N,&Q);
for(i=1;i<=N;i++)
scanf("%d",list+i);
mktable();
for(i=1;i<=Q;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",rmq1(a,b)-rmq2(a,b));
}
return 0;
}
“长风破浪会有时,直挂云帆济沧海”
AC 3000+ms
/**
** poj-3264 balanced lineup
** mike-w
** 2011-11-21
** tag: RMQ
**/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LIST_SIZE 100000
#define MAX_EXP 100
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
int list[LIST_SIZE];
int rmin[LIST_SIZE][MAX_EXP],rmax[LIST_SIZE][MAX_EXP];
int N,Q;
int mktable(void)
{
int i,j;
for(i=1;i<=N;i++)
rmin[i][0]=rmax[i][0]=list[i];
for(j=1;j<=log(N)/log(2);j++)
for(i=1;i+(1<<j)-1<=N;i++)
{
rmin[i][j]=min(rmin[i][j-1],rmin[i+(1<<(j-1))][j-1]);
rmax[i][j]=max(rmax[i][j-1],rmax[i+(1<<(j-1))][j-1]);
}
return 0;
}
int rmq1(int l,int r)
{
int x=log(r-l+1)/log(2);
return max(rmax[l][x],rmax[r+1-(1<<x)][x]);
}
int rmq2(int l,int r)
{
int x=log(r-l+1)/log(2);
return min(rmin[l][x],rmin[r+1-(1<<x)][x]);
}
int main(void)
{
int i,a,b;
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
scanf("%d%d",&N,&Q);
for(i=1;i<=N;i++)
scanf("%d",list+i);
mktable();
for(i=1;i<=Q;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",rmq1(a,b)-rmq2(a,b));
}
return 0;
}
相关文章推荐
- POJ 3264 Balanced Lineup,RMQ
- RMQ模板题 POJ 3264
- POJ_3264_Balance Lineup_RMQ
- POJ 3264 Balanced Lineup(简单RMQ)
- POJ 3264 RMQ--ST 算法
- POJ 3264——Balanced Lineup(RMQ ,segment tree,树状数组)
- POJ 3264 Balanced Lineup[RMQ入门题]
- POJ 3264 Balanced Lineup(RMQ)
- 【POJ 3264】【RMQ 或者线段树】Balanced Lineup 【查询区间内最大最小值的差】
- POJ 3264 Balanced Lineup【RMQ-ST算法-区间最值】
- POJ-3264 Balanced Lineup【RMQ】
- POJ 3264 Balanced Lineup【RMQ附模板】
- POJ---3264-Balanced Lineup (RMQ)
- 简单RMQ模板题 POJ 3264
- POJ 3264 解题报告 RMQ 问题 ST算法
- POJ 3264 Balanced Lineup 【RMQ求区间最值模板题】
- (模板题)poj 3264 Balanced Lineup(RMQ的ST算法)
- Poj 3264 Balanced Lineup【RMQ----ST算法】
- POJ 3264 Balanced Lineup RMQ问题 ST算法 O(1)查找区间最值
- POJ 3264 Balanced Lineup(RMQ)