#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q,a[50005];
struct node
{
int ma,mi;
}cow[500005];
node inf;
node inital(int l,int r,int k)
{
if(r-l==1)
{
cow[k].mi=cow[k].ma=a[l];
return cow[k];
}
node c1=inital(l,(l+r)/2,k*2+1);
node c2=inital((l+r)/2,r,k*2+2);
cow[k].mi=min(c1.mi,c2.mi);
cow[k].ma=max(c1.ma,c2.ma);
return cow[k];
}
node query(int a,int b,int l,int r,int k)
{
if(a<=l&&r<=b)
return cow[k];
if(r<=a||l>=b)
return inf;
node c1=query(a,b,l,(l+r)/2,k*2+1);
node c2=query(a,b,(l+r)/2,r,k*2+2);
node c;
c.mi=min(c1.mi,c2.mi);
c.ma=max(c1.ma,c2.ma);
return c;
}
int main()
{
inf.ma=0;
inf.mi=1000000;
while(cin>>n>>q)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
inital(0,n,0);
for(int i=0;i<q;i++)
{
int r,l;
scanf("%d%d",&l,&r);
l--;
node c=query( l, r,0,n,0);
printf("%d\n",c.ma-c.mi);
}
}
return 0;
}
poj3264
最新推荐文章于 2016-07-04 15:34:37 发布