Pagini recente » Cod sursa (job #303233) | Cod sursa (job #501720) | Cod sursa (job #1415264) | Cod sursa (job #743611) | Cod sursa (job #2450325)
#include <fstream>
#include <iostream>
#include <cmath>
#define inf 2000000000
#define NMAX 100000
#define SQRT 320
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, val, k, v[NMAX+10], a[SQRT+10];
int main()
{
f >> n >> m;
int val = sqrt(n);
for(int i=1; i<=val+5; i++) a[i] = inf;
for(int i=1; i<=n; i++)
{ f >> v[i];
k = (i-1) / val + 1;
a[k] = min(a[k], v[i]);
}
//for(int i=1; i<=k; i++) cout << a[i] << ' ';
//cout << '\n';
while(m--)
{ int p1, p2, g1, g2, mini = inf;
f >> p1 >> p2;
g1 = (p1-1) / val + 1;
g2 = (p2-1) / val + 1;
if(g1 == g2) for(int i=p1; i<=p2; i++) mini = min(mini, v[i]);
else
{ for(int i=g1+1; i<g2; i++) mini = min(mini, a[i]);
int i = p1;
while(((i-1) / val + 1) == g1) mini = min(mini, v[i]), i++;
i = p2;
while(((i-1) / val + 1) == g2) mini = min(mini, v[i]), i--;
}
g << mini << '\n';
}
return 0;
}