Pagini recente » Cod sursa (job #1833635) | Cod sursa (job #1350758) | Istoria paginii info-oltenia-2019/echipe/solutii | Cod sursa (job #158890) | Cod sursa (job #2617074)
#include <cmath>
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int N = 100002, Inf = 1e9;
int n,m, x, y, ls , ld;
int v[N],M[N];
int main() {
cin >> n >> m;
for(int i = 1 ;i <= n ;i ++)
{
cin >> v[i];
}
int rad = sqrt(n);
for(int i = 1; i * rad <=n; i ++)
{
M[i] = Inf;
for(int j= rad*(i - 1) + 1; j <=rad * i; j ++)
{
M[i] = min(M[i], v[j]);
}
}
// for(int i = 1 ;i <=n; i ++)
// cout << M[i]<<" ";
for(int i = 1 ;i <=m ;i ++)
{
int ans =1e9,j;
cin >> x >> y;
for (j=1;rad*j<x;j++);
j++;
ls=min(rad*(j-1),y);
for (;rad*j<=y;j++)
ans=min(ans,M[j]);
ld=max(rad*(j-1),x);
for (j=x;j<=ls;j++)
ans=min(ans,v[j]);
for (j=ld;j<=y;j++)
ans=min(ans,v[j]);
cout << ans <<'\n';
}
return 0;
}