Pagini recente » Cod sursa (job #127730) | Istoria paginii utilizator/jeanpopescu222 | Profil scipianus | Statistici Cristian Benghe (chriss_b_001) | Cod sursa (job #348539)
Cod sursa(job #348539)
#include <iostream>
#include <fstream>
using namespace std;
#define fin "arbint.in"
#define fout "arbint.out"
#define NMAX 100000
int N, M, arb[4 * NMAX];
int stTarget, drTarget;
void insert(int nod, int st, int dr, int val)
{
if ( st == dr )
{
arb[ nod ] = val;
return ;
}
int mid = st + (dr - st)/2;
if ( stTarget <= mid )
insert(2*nod,st,mid,val);
else
insert(2*nod + 1,mid + 1, dr, val);
arb[nod] = max(arb[2*nod],arb[2*nod+1]);
}
int query(int nod, int st, int dr)
{
if ( stTarget <= st && dr <= drTarget )
return arb[nod];
int mid = st + (dr-st)/2, ret = 0;
if ( stTarget <= mid )
ret = query(2*nod,st,mid);
if ( drTarget > mid )
ret = max(ret,query(2*nod+1,mid + 1,dr));
return ret;
}
int main()
{
int i, val, a, b, op;
ifstream f1(fin);
ofstream f2(fout);
f1 >> N >> M;
for ( i = 1; i <= N; ++i )
{
stTarget = i;
f1 >> val, insert(1,1,N,val);
}
for ( i = 1; i <= M; ++i )
{
f1 >> op >> a >> b;
if ( !op )
{
stTarget = a;
drTarget = b;
f2 << query(1,1,N) << endl;
}
else
{
stTarget = a;
insert(1,1,N,b);
}
}
return 0;
}