Pagini recente » Istoria paginii runda/pregatire_pt_oji | Profil BAGPULA | Istoria paginii runda/test52718/clasament | Istoria paginii runda/juniori_1 | Cod sursa (job #1667564)
#include <iostream>
#include <fstream>
#define oo (1<<30)
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100001;
int n,m;
int a[NMAX];
int M[NMAX];
int main()
{
in>>n>>m;
int rad = 1;
for(rad = 1;rad*rad<n;rad++);
rad--;
a[0] = oo;
for(int i=1;i<=n;i++)
{
in>>a[i];
if(a[M[(i-1)/rad]] > a[i])
M[(i-1)/rad] = i;
}
int x,y;
int minn;
for(int i=1;i<=m;i++)
{
in>>x>>y;
minn = a[x++];
while(x<=y)
{
if(x%rad==1)
{
minn = min(minn,a[M[(x-1)/rad]]);
x+=rad;
}
else
minn = min(minn,a[x++]);
}
out<<minn<<"\n";
}
in.close();
out.close();
return 0;
}