Pagini recente » Cod sursa (job #1589706) | Cod sursa (job #2726123) | Cod sursa (job #408354) | Cod sursa (job #2363697) | Cod sursa (job #2077756)
#include <fstream>
#include <climits>
#include <math.h>
using namespace std;
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long num, querry, root, x, y;
long long *array;
long long *squares;
fin >> num >> querry;
array = new long long[num];
squares = new long long[num];
for (int i = 0; i < num; ++i) {
fin >> array[i];
}
root = sqrt(num);
for (int i = 0; i < root; ++i) {
squares[i] = INT_MAX;
for (int j = root * i; j < root * (i + 1); ++j) {
squares[i] = squares[i] < array[j] ? squares[i] : array[j];
}
}
for (int i = 1; i <= querry; i++)
{
long long mn, j, ld, ls;
mn = INT_MAX;
fin >> x >> y;
//for (j = 1; root * j < x; j++);
j = x / root;
j++;
ls = min(root * (j - 1), y);
for (; root * j <= y; j++)
mn = min(mn, squares[j - 1]);
ld = max(root * (j - 1), x);
for (j = x; j <= ls; j++)
mn = min(mn, array[j - 1]);
for (j = ld; j <= y; j++)
mn = min(mn, array[j - 1]);
fout << mn << "\n";
}
delete[] array;
delete[] squares;
fin.close();
fout.close();
return 0;
}