Pagini recente » Cod sursa (job #2289074) | Cod sursa (job #1265791) | Cod sursa (job #1312232) | Cod sursa (job #1554219) | Cod sursa (job #2632376)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
int n,q,a[18][100002],put[100002],doi[20];
void precalculare ()
{
int k=1,nr=2;
while (nr<=n)
{
for (int i=1;i<=n-nr+1;i++)
a[k][i]=min(a[k-1][i],a[k-1][i+nr/2]);
nr*=2;
k++;
}
}
int main()
{
fin>>n>>q;
for (int i=1;i<=n;++i)
fin>>a[0][i];
precalculare ();
int x,y,nr=1,k=0;
doi[0]=1;
for (int i=1;i<=n;i++)
{
if (nr*2==i)
{
nr*=2,++k;
doi[k]=nr;
}
put[i]=k;
}
for(;q>0;q--)
{
fin>>x>>y;
fout<<min(a[put[y-x+1]][x],a[put[y-x+1]][y-doi[put[y-x+1]]+1])<<'\n';
}
return 0;
}