Pagini recente » Cod sursa (job #2181864) | Cod sursa (job #1038071) | Cod sursa (job #1172353) | Cod sursa (job #271854) | Cod sursa (job #2966074)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N=1<<18;
int a,b,poz,val,t[N];
int interogare(int p, int st, int dr) {
if ( a <= st && dr <= b ) {
return t[p];
}
int m = (st + dr) / 2, maxst, maxdr;
if ( a <= m ) {
maxst = interogare(2 * p, st, m);
}
else
maxst = -1;
if ( m < b ) {
maxdr = interogare(2 * p + 1, m + 1, dr);
}
else
maxdr = -1;
return max(maxst, maxdr);
}
void actualizare(int p, int st, int dr) {
if ( st==dr ) {
t[p] = val;
return;
}
int m = (st + dr) / 2;
if ( poz <= m ) {
actualizare(2 * p, st, m);
}
else {
actualizare(2 * p + 1, m + 1, dr);
}
t[p]=max(t[2 * p], t[2 * p + 1]);
}
int main()
{
int n, m, tip;
in >> n >> m;
for ( int i = 1; i <= n; i++ ) {
in >> val;
poz = i;
actualizare(1, 1, n);
}
for ( int i = 0; i < m; i++ ) {
in >> tip;
if ( tip == 0 ) {
in >> a >> b;
out << interogare(1, 1, n) << "\n";
}
else {
in >> poz >> val;
actualizare(1, 1, n);
}
}
in.close();
out.close();
return 0;
}