Pagini recente » Cod sursa (job #473861) | Cod sursa (job #2347206) | Cod sursa (job #390665) | Cod sursa (job #2519741) | Cod sursa (job #2512174)
#include <iostream>
#include <fstream>
using namespace std;
#define ZERO 10000000
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N;
int Arr[100001];
int Q;
int table[100001][18];
int k;
int query (int st,int dr)
{
int rez=ZERO;
int i;
for (i=k;i>=0;--i)
{
if (st+(1<<i)-1<=dr)
{
rez=min(rez,table[st][i]);
st=st+(1<<i);
}
}
return rez;
}
int main()
{
fin >> N >> Q;
int i,j;
for (i=1;i<=N;++i)
{
fin >> Arr[i];
}
///se construieste table[][]
for (i=1;i<=N;++i)
{
table[i][0]=Arr[i];
}
k=0;
for (j=1;(1<<j)<=N;++j)
{
++k;
for (i=1;i+(1<<j)<=N;++i)
{
table[i][j]=min(table[i][j-1],table[i+(1<<(j-1))][j-1]);
}
}
/*
for (i=0;i<N;++i)
{
for (j=0;j<=k;++j)
{
fout << table[i][j] << " ";
}
fout << '\n';
}
*/
for (i=1;i<=Q;++i)
{
int st,dr;
fin >> st >> dr;
fout << query(st,dr) << '\n';
}
fin.close();
fout.close();
return 0;
}