Pagini recente » Cod sursa (job #107949) | Cod sursa (job #2263686) | Cod sursa (job #1129457) | Cod sursa (job #1582749) | Cod sursa (job #1327557)
#include <fstream>
#define NMax 50001
using namespace std;
ifstream f("saracsaurege.in");
ofstream g("saracsaurege.out");
int n, m, v[NMax], rmq[2][NMax], lg, l, r, k;
inline int getmax(int a, int b)
{
if (a > b)
return a;
return b;
}
inline void process_rmq(int r, int l)
{
lg = 0;
for (int i = 1; i <= n; i++)
rmq[0][i] = v[i];
for (int i = 1; (1 << i) <= r - l + 1; i++, lg++);
for (int i = 1; i <= lg; i++) {
for (int j = 1; j <= n - (1 << i) + 1; j++)
rmq[i % 2][j] = getmax(rmq[1 - i % 2][j], rmq[1 - i % 2][j + (1 << (i - 1))]);
}
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; i++)
f >> v[i];
for (k = 1; k <= m; k++) {
f >> l >> r;
process_rmq(r, l);
g << getmax(rmq[lg % 2][l], rmq[lg % 2][l + (r - l + 1) - (1 << lg)]) << "\n";
}
return 0;
}