poj 3264
rmq
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int n,m;
int dp[50001][20];
int b[50001][20];
int a[50001];
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t;
cin>>n>>m;
for(i=1;i<=n;i++)
// cin>>a[i];
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
dp[i][0]=a[i];
b[i][0]=a[i];
}
for(j=1;pow(2.,j)<=n;j++)
for(i=1;i+pow(2.,j)-1<=n;i++)
{
dp[i][j]=max(dp[i][j-1],dp[i+(int)pow(2.,j-1)][j-1]);
b[i][j]=min(b[i][j-1],b[i+(int)pow(2.,j-1)][j-1]);
}
for(i=1;i<=m;i++)
{
// cin>>j>>k;
scanf("%d%d",&j,&k);
s=(int)(log(k-j+1.)/log(2.));
cout<<max(dp[j][s],dp[k-(int)pow(2.,s)+1][s])-min(b[j][s],b[k-(int)pow(2.,s)+1][s])<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号