Pagini recente » Cod sursa (job #851558) | Cod sursa (job #893439) | Cod sursa (job #2249392) | Cod sursa (job #3297341) | Cod sursa (job #2635229)
#include <stdio.h>
#define NMAX 100000
using namespace std;
FILE* fin, * fout;
int n, m, v[NMAX + 1];
int t[NMAX][17];
int min(int a, int b) {
return (a < b) ? a : b;
}
void builTable() {
for (int i = 1;i <= n;++i)
t[i][0] = v[i];
for (int j = 1;(1 << j) <= n;++j) {
for (int i = 1;i + (1 << j)-1 <= n;++i)
t[i][j] = min(t[i][j - 1], t[i + (1 << (j-1))][j - 1]);
}
for (int i = 1;i <= n;++i) {
for (int j = 0;j <= 5;++j)
printf("%i ", t[i][j]);
printf("\n");
}
}
int log2(int x) {
int res = 0;
while (x>1) {
++res;
x /= 2;
}
return res;
}
int getMin(int x, int y) {
int r = log2(y - x + 1);
return min(t[x][r], t[y - (1 << r) + 1][r]);
}
int main()
{
fin = fopen("file.in", "r");
fout = fopen("aib.out", "w");
fscanf(fin, "%i %i", &n, &m);
for (int i = 1;i <= n;++i) {
fscanf(fin,"%i", &v[i]);
}
builTable();
while (m--) {
int x, y;
fscanf(fin, "%i %i", &x, &y);
printf("%i\n", getMin(x, y));
}
return 0;
}