Pagini recente » Cod sursa (job #1100988) | Cod sursa (job #1469245) | Cod sursa (job #570526) | Cod sursa (job #386488) | Cod sursa (job #1935242)
#include <fstream>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
const int MAX = 100001;
int N, M, X, Pos, segTree[400070], leftQ, rightQ;
void constructTree (int left, int right, int position) {
if (left == right) {
segTree[position] = X;
return;
}
int mid = (left + right)/2;
if (Pos <= mid)constructTree (left, mid, 2*position);
else constructTree (mid+1, right, 2*position+1);
segTree[position] = min (segTree[2*position], segTree[2*position+1]);
}
int Query (int left, int right, int position) {
if (leftQ <= left && rightQ >= right){ ///Total Overlap
return segTree[position];
}
if (leftQ > right || rightQ < left)/// No Overlap
return MAX;
int mid = (left + right)/2;
return min (Query (left, mid, 2*position), Query (mid+1, right, 2*position+1) );
}
int main()
{
in >> N >> M;
for (int i = 1; i <= N; ++ i) {
in >> X;
Pos = i;
constructTree (1, N, 1);
}
for (int i = 1; i <= M; ++ i) {
in >> leftQ >> rightQ;
out << Query (1, N, 1) <<'\n';
}
return 0;
}