Pagini recente » Cod sursa (job #1185945) | Cod sursa (job #1750260) | Cod sursa (job #1928292) | Cod sursa (job #1576062) | Cod sursa (job #2754065)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#define n_max 100001
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[n_max];
int m[n_max][100];
int lg[100001];
int n;
long long putere(int x)
{
long long rez = 1;
while(x)
{
rez = rez*2;
x--;
}
return rez;
}
void procces(int v[n_max],int m[n_max][100],int n)
{
int i,j;
for(i = 1;i<=n;i++)
m[0][i] = v[i];
for(i=1;putere(i)<=n;i++)
for(j=1;j+putere(i)-1<=n;j++)
m[i][j] = min(m[i-1][j],m[i-1][j+putere(i-1)]);
}
int main()
{
int p,k;
int log;
int prim,sec;
lg[1] = 0;
for(int i=2; i <= n; i++)
lg[i] = lg[ i/2] + 1;
fin>>n>>p;
for(int i=1;i<=n;i++)
fin>>v[i];
procces(v,m,n);
for(int i=0;i<p;i++)
{
fin>>prim>>sec;
k = sec-prim+1;
log = lg[k];
fout<<min(m[log][prim],m[log][sec+1 - putere(log)])<<"\n";
}
return 0;
}