Pagini recente » Cod sursa (job #571432) | Cod sursa (job #2053792) | Cod sursa (job #2485616) | Cod sursa (job #2960972) | Cod sursa (job #1914976)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define INF 0x3f3f3f3f
#define NMAX 100005
using namespace std;
int n, q, a[NMAX], smen[NMAX], sqr;
void citire()
{
scanf("%d %d ",&n,&q);
for(int i=0;i<n;i++)
{
scanf("%d ",&a[i]);
}
}
void build_smen()
{
sqr = (int) sqrt(n);
fill(smen,smen+sqr+1,INF);
for(int i=0; i<n; i++)
{
smen[i/sqr]=min(smen[i/sqr],a[i]);
}
}
int query(int i,int j)
{
int minim = INF;
for(int bucata=(i+1)/sqr; bucata <= (j-1)/sqr; bucata++)
minim = min(smen[bucata],minim);
for(int t=i; t< (i+1)/sqr * sqr;t++)
minim = min(a[t],minim);
for(int t=j/sqr * sqr; t<=j;t++)
minim = min(a[t],minim);
return minim;
}
void solve()
{
for(int qq=1;qq<=q;qq++)
{
int i, j;
scanf("%d %d ",&i,&j);
printf("%d\n",query(i-1,j-1));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
build_smen();
solve();
return 0;
}