Pagini recente » Borderou de evaluare (job #2941074) | Cod sursa (job #1136603) | Sfaturi pentru interviuri de programare | Rezultatele filtrării | Cod sursa (job #2676502)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define NMAX 100002
#define INF 0x3f3f3f3F
int main() {
long int num[NMAX];
long int sq[NMAX] = {0};
int N, M;
long int r;
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
scanf("%d %d", &N, &M);
for (int i = 1 ; i <= N ; i++) {
scanf("%ld", &num[i]);
}
r = 0;
while (r * r <= N)
{
r++;
}
r--;
for (int i = 1 ; r * i <= N ; i++) {
sq[i] = INF;
for(long int j = r * (i - 1) + 1 ; j <= r * i ; j++) {
sq[i] = min(sq[i], num[j]);
}
}
long int j, x, y, ls, ld, rez;
for (int i = 1 ; i <= M ; i++) {
rez = INF;
scanf("%ld %ld", &x, &y);
j = 1;
while (r * j < x)
{
j++;
}
j++;
ls = min(r * (j - 1), y);
while (r * j <= y) {
rez = min(rez, sq[j]);
j++;
}
ld = max(r * (j - 1), x);
for (j = x ; j <= ls ; j++) {
rez = min(rez, num[j]);
}
for (j = ld ; j <= y ; j++) {
rez = min(rez, num[j]);
}
printf("%ld\n", rez);
}
return 0;
}