Pagini recente » Cod sursa (job #1181904) | Cod sursa (job #2413187) | Cod sursa (job #311123) | Cod sursa (job #2354257) | Cod sursa (job #1175947)
#include <fstream>
#include <cmath>
#define lmax 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,q,i,j,k,st,dr;
int v[lmax];
int a[lmax][21];
int main()
{
f>>n>>q;
for (i=0;i<n;i++)
f>>v[i];
for (i=0;i<n;i++)
a[i][0]=i;
for (i=1;i<=20;i++)
for (j=0;j<=n-(1<<(i-1));j++)
if (v[a[j][i-1]]<v[a[j+(1<<(i-1))][i-1]])
a[j][i]=a[j][i-1];
else
a[j][i]=a[j+(1<<(i-1))][i-1];
for (i=1;i<=q;i++)
{
f>>st>>dr;
st--;
dr--;
k=log2(dr-st+1);
if (v[a[st][k]]<v[a[dr-(1<<k)+1][k]])
g<<v[a[st][k]]<<'\n';
else
g<<v[a[dr-(1<<k)+1][k]]<<'\n';
}
f.close();
g.close();
}