Pagini recente » Cod sursa (job #2537671) | Cod sursa (job #1045096) | Cod sursa (job #1829598) | Cod sursa (job #2650129) | Cod sursa (job #1915160)
#include <cstdio>
#include <cmath>
#define NMAX 100005
#define min(x,y) ((x<y)?(x):(y))
using namespace std;
int n, q, a[NMAX], smen[NMAX], sqr;
void citire()
{
scanf("%d %d ",&n,&q);
sqr = (int) sqrt(n);
for(int i=0;i<n;i++)
{
scanf("%d ",&a[i]);
smen[i/sqr]= ((i%sqr==0) ? a[i] : min(smen[i/sqr],a[i]));
}
}
int query(int st,int dr)
{
int i=0;
for (; i < st; i += sqr);
int cm = a[st];
for (int j = st; j < i; j++)
cm = min(cm, a[j]);
for (;i+sqr < dr; i += sqr)
cm = min(cm, smen[i/sqr]);
for (int j = i; j <= dr; j++)
cm = min(cm, a[j]);
return cm;
}
void solve()
{
for(int i=1;i<=q;i++)
{
int st, dr;
scanf("%d %d ",&st,&dr);
printf("%d\n",query(st-1,dr-1));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
solve();
return 0;
}