Pagini recente » Cod sursa (job #1086795) | Cod sursa (job #1323693) | Cod sursa (job #681229) | Cod sursa (job #1271620) | Cod sursa (job #1790552)
#include <stdio.h>
#include <vector>
#include<fstream>
#include<iostream>
#define NMAX 100002
#define LMAX 18
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int r[NMAX][LMAX];
long int n,m,i,x,y;
long int lg2[NMAX];
long int v[NMAX];
void BuildRMQ()
{
int i,j;
for(i=0;i<n;i++)
r[i][0]=v[i];
int m=lg2[n]+1;
for(j=1;j<m;j++)
for(i=0;i+(1<<j)-1<n;i++)
r[i][j]=min(r[i][j-1],r[i+1][j-1]);
}
int RMQ(int x,int y)
{
int l,k;
l=y-x+1;
k=lg2[l];
return min(r[x][k],r[x+l-(1<<k)-1][k]);
}
int main()
{
f>>n>>m;
for(i=0;i<n;i++)
f>>v[i];
lg2[1]=0;
for(i=2;i<=n;i++)
lg2[i]=lg2[i/2]+1;
BuildRMQ();
for(i=1;i<=m;i++)
{
f>>x>>y;
g<<RMQ(x,y)<<'\n';
}
}