Pagini recente » Cod sursa (job #1383590) | Profil manutruta | Profil Al3ks1002 | Cod sursa (job #1171231) | Cod sursa (job #2279569)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int ARB[4 * NMAX + 100], val, pos, stanga, dreapta, maxx;
void UpdateArbore(int nod , int st, int dr){
if(st == dr){
ARB[nod] = val;
return;
}
int mij = (st + dr) / 2;
if(pos <= mij)
UpdateArbore(nod * 2, st, mij);
else UpdateArbore(nod * 2 + 1, mij + 1, dr);
ARB[nod] = max(ARB[nod * 2], ARB[nod * 2 + 1]);
}
void Query(int nod, int st, int dr){
if(stanga <= st && dr <= dreapta){
if(maxx < ARB[nod])
maxx = ARB[nod];
return;
}
int mij = (st + dr) / 2;
if(stanga <= mij)
Query(nod * 2, st, mij);
if(mij < dreapta)
Query(nod * 2 + 1, mij + 1, dr);
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++i)
{
int x;
fin >> x;
val = x;
pos = i;
UpdateArbore(1, 1, n);
}
for(int i = 1; i <= m; ++i){
int c, a, b;
fin >> c >> a >> b;
if(c == 0){
maxx = -1;
stanga = a;
dreapta = b;
Query(1, 1, n);
fout << maxx << '\n';
}
else {
pos = a;
val = b;
UpdateArbore(1, 1, n);
}
}
return 0;
}