Pagini recente » Cod sursa (job #177830) | Cod sursa (job #2606491) | Cod sursa (job #2228993) | Cod sursa (job #2212491) | Cod sursa (job #154982)
Cod sursa(job #154982)
#include <cstdio>
#include <cstring>
#include <cmath>
#define log2(a) (int) (log(a)/log(2))
int n, m, qstart, qstop;
int v[300005][18];
inline int min(int a, int b)
{
if(a < b)
return a;
else
return b;
}
void read()
{
int t1;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
scanf("%d", &v[i][0]);
}
}
void readquery()
{
scanf("%d%d", &qstart, &qstop);
}
int main()
{
int i, j;
memset(v, 1000005, sizeof(v));
read();
for(j = 1; j <= 17; j++)
{
for(i = 1; i <= n; i++)
{
v[i][j] = min(v[i][j-1], v[i + (1 << (j-1))][j-1]);
}
}
while(m)
{
readquery();
fprintf(stderr, "qstart=%d, qstop=%d\nm1i=%d, m1j=%d, m1=%d\nm2i=%d, m2j=%d, m2=%d\n",
qstart, qstop, qstart, log2(qstop-qstart), v[qstart][log2(qstop-qstart)],
qstop-((int) pow(2, log2(qstop-qstart)-1 )), log2(qstop-qstart),
v[qstop-((int) pow(2, log2(qstop-qstart)-1 ))][log2(qstop-qstart)]
);
printf("%d\n",
min(
v[qstart][log2(qstop-qstart)],
v[qstop-((int) pow(2, log2(qstop-qstart)-1 ))][log2(qstop-qstart)]
)
);
m--;
}
return 0;
}