Pagini recente » Cod sursa (job #1997292) | Cod sursa (job #3271794) | Cod sursa (job #2888439) | Cod sursa (job #909841) | Cod sursa (job #1813679)
/// Problema "Rmq" - InfoArena
#include <cstdio>
#include <algorithm>
#define in "rmq.in"
#define out "rmq.out"
#define NMAX (100000 + 7)
#define RAD 350
#define DIM (100000 + 7)
using namespace std;
int N, M, v[NMAX], a, b, batog[RAD], ct, poz;
char buff[DIM];
inline void goNext()
{
++poz;
if(poz == DIM)
{
poz = 0;
fread(buff, 1, DIM, stdin);
}
}
void citeste(int &nr)
{
nr = 0;
while(buff[poz] < '0' || buff[poz] >= '9') goNext();
while(buff[poz] <= '9' && buff[poz] >= '0')
{
nr = nr*10 + buff[poz] - '0';
goNext();
}
}
int main()
{
freopen(in, "r", stdin);
freopen(out, "w", stdout);
fread(buff, 1, DIM, stdin);
for(int i = 0; i< RAD; ++i) batog[i] = NMAX;
scanf("%d %d", &N, &M);
//citeste(N);
//citeste(M);
for(int i = 1; i<= N; ++i)
{
scanf("%d", &v[i]);
//citeste(v[i]);
if(i%RAD == 0) ++ct;
batog[ct] = min(batog[ct], v[i]);
}
for( ; M; --M)
{
scanf("%d %d", &a, &b);
//citeste(a);
//citeste(b);
int sol = NMAX;
if((a/RAD) == (b/RAD))
{
for(int i = a; i<= b; ++i)
{
sol = min(sol, v[i]);
}
printf("%d\n", sol);
continue;
}
while(a%RAD)
{
sol = min(sol, v[a]);
++a;
}
while(b%RAD != (RAD-1))
{
sol = min(sol, v[b]);
--b;
}
int tmp1 = a/RAD, tmp2 = b/RAD;
for(int i = tmp1; i<= tmp2; ++i) sol = min(sol, batog[i]);
printf("%d\n", sol);
}
return 0;
}