Pagini recente » Cod sursa (job #2147953) | Cod sursa (job #2718239) | Cod sursa (job #2471563) | Cod sursa (job #2499472) | Cod sursa (job #849812)
Cod sursa(job #849812)
#include<fstream>
#include<algorithm>
using namespace std;
const int Nmax = 100001;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M, V[Nmax], aint[262144];
int lo, hi, poz, val, rez;
void build(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = V[st];
return;
}
int mij = (st+dr)/2;
build(2*nod, st, mij);
build(2*nod+1, mij+1, dr);
aint[nod] = max(aint[2*nod], aint[2*nod+1]);
}
void query(int nod, int st, int dr) {
if(lo <= st && dr <= hi) {
rez = max(rez, aint[nod]);
return;
}
int mij = (st+dr)/2;
if(lo <= mij)
query(2*nod, st, mij);
if(mij < hi)
query(2*nod+1, mij+1, dr);
}
void update(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = val;
return;
}
int mij = (st+dr)/2;
if(poz <= mij)
update(2*nod, st, mij);
else
update(2*nod+1, mij+1, dr);
aint[nod] = max(aint[2*nod], aint[2*nod+1]);
}
int main() {
int i, op;
f>>N>>M;
for(i=1; i<=N; ++i)
f>>V[i];
build(1, 1, N);
while(M--) {
f>>op;
if(op == 0) {
f>>lo>>hi;
rez = -1<<30;
query(1, 1, N);
g<<rez<<"\n";
}
else {
f>>poz>>val;
update(1, 1, N);
}
}
f.close(); g.close();
return 0;
}