Pagini recente » Cod sursa (job #1935553) | Cod sursa (job #1270103) | Cod sursa (job #2965387) | Cod sursa (job #1538900) | Cod sursa (job #1403502)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int n,m,v[1001],a[1001][11],x,y,k;
void build()
{
for(int i=0;i<n;++i)
a[i][0]=i;
for(int j=1;(1<<j)<n;++j)
for(int i=0;i+(1<<j)-1<n;++i)
{
if(v[a[i][j-1]] <v[a[i+(1<<(j-1))][j-1]])
a[i][j]=a[i][j-1];
else
a[i][j]=a[i+(1<<(j-1))][j-1];
}
}
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
for(int i=0;i<n;++i)
fin>>v[i];
build();
while(m--)
{
fin>>x>>y;
x--;
y--;
k=log2(y-x+1);
if(v[a[x][k]] < v[a[y-(1<<k)+1][k]])
fout<<v[a[x][k]]<<"\n";
else fout<<v[a[y-(1<<k)+1][k]]<<"\n";
}
return 0;
}