Pagini recente » Cod sursa (job #2141370) | Cod sursa (job #2953847) | Cod sursa (job #2877438) | Cod sursa (job #1568921) | Cod sursa (job #509075)
Cod sursa(job #509075)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100005;
int n, m, a[N][20], x[N], l[N], P[20];
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int p, i, j, k, X, Y;
scanf("%d %d ", &n, &m);
for(i = 1; i <= n; ++i)
scanf("%d", &x[i]);
p = 1;
k = -1;
for(i = 1; i<= n; ++i) {
if( i == p )
++k, p*=2;
if( i <= p )
l[i] = k ;
}
P[0] = 1;
for(i = 1; i <= 19; ++i)
P[i] = P[i - 1] * 2;
for(i = 1; i <= n; ++i)
a[i][0] = x[i];
for(j = 1; j <= l[n]; ++j)
for(i = 1; i <= n; ++i)
if( i + P[j] <= n + 1 )
a[i][j] = min(a[i][j - 1], a[i + P[j - 1]][j - 1]);
for(; m; --m) {
scanf("%d %d", &i, &j);
printf("%d \n", min(a[i][l[j-i+1]], a[j - P[l[j-i+1]]+1][l[j-i+1]] ) );
}
/* for(i = 1; i <= n; ++i) {
for( j = 0;j <= l[n]; ++j)
printf("%d ",a[i][j]);
printf("\n");
}
*/
return 0;
}