Pagini recente » Cod sursa (job #3275783) | Cod sursa (job #2947703) | Cod sursa (job #2879666) | Cod sursa (job #217158) | Cod sursa (job #290262)
Cod sursa(job #290262)
#define nm 100010 #define mm 18 int v[nm]; int a[nm][mm]; int n, m, i, x, y, j; inline int mn (int a, int b) { return (a < b ? a : b); } int rmq(int x, int y) { int z = (y-x+1); int k = 0, p = 1; while (p <= z) { ++k; p *= 2; } --k; return (mn ( v[a[x][k]], v[a[y-(1 << k)+1][k]] )); } void read() { scanf("%d %d ", &n, &m); for (i=1; i<=n; ++i) { scanf("%d ", &v[i]); a[i][0] = i; } for (j=1; 1 << j <=n; ++j) { for (i=1; (i + (1 << j) - 1 )<=n; ++i) { if (v[a[i][j-1]] < v[a[i + (1 << (j-1))][j-1]]) a[i][j] = a[i][j-1]; else a[i][j] = a[i + (1 << (j-1))][j-1]; } } } void solve() { for (i=1; i<=m; ++i) { scanf("%d %d ", &x, &y); printf("%d\n", rmq(x, y)); } } void write() { } int main() { freopen("rmq.in", "r", stdin); freopen("rmq.out","w",stdout); read(); solve(); write(); return 0; }