Pagini recente » Cod sursa (job #2882580) | Cod sursa (job #2869577) | Cod sursa (job #269857) | Cod sursa (job #1945224) | Cod sursa (job #1914989)
#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 = a[i];
for(int t=i+1; t< (i/sqr+1) * sqr;t++)
minim = min(a[t],minim);
for(int bucata=(i/sqr)+1; (bucata+1)*sqr -1 <= j; bucata++)
minim = min(smen[bucata],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;
}