Pagini recente » Cod sursa (job #2186017) | Cod sursa (job #2374763) | Cod sursa (job #2150224) | Cod sursa (job #2038347) | Cod sursa (job #1299043)
#include <iostream>
#include <fstream>
#include <climits>
#define NMax 50005
using namespace std;
ifstream f("saracsaurege.in");
ofstream g("saracsaurege.out");
int n, m;
int A[NMax];
int M[4*NMax];
int val;
int pos;
int maxi;
int start, finish;
inline int maxim(int a, int b) {
if (a > b)
return a;
return b;
}
void update(int nod, int left, int right) {
if (left == right) {
M[nod] = val;
return;
}
int mij = (left+right)/2;
if (pos <= mij)
update(2*nod, left, mij);
else
update(2*nod+1, mij+1, right);
M[nod] = maxim(M[2*nod], M[2*nod+1]);
}
void query(int nod, int left, int right) {
if (left > right)
return;
if (start <= left && right <= finish) {
maxi = maxim(maxi, M[nod]);
return;
}
int mij = (left+right)/2;
if (start <= mij)
query(2*nod, left, mij);
if (mij < finish)
query(2*nod+1, mij+1, right);
}
void read() {
f>>n>>m;
for (int i=1;i<=n;i++) {
int x;
f>>x;
val = x; pos = i;
update(1,1,n);
}
for (int i=1;i<=m;i++) {
int a, b; f>>a>>b;
start = a; finish = b;
maxi = -1;
query(1,1,n);
g<<maxi<<endl;
}
}
int main() {
read();
f.close(); g.close();
return 0;
}