Pagini recente » Cod sursa (job #380756) | Cod sursa (job #3169102) | Cod sursa (job #400602) | Cod sursa (job #1400050) | Cod sursa (job #2626458)
#include <bits/stdc++.h>
using namespace std;
#define dim 100001
int N,M;
int maxArb[4*dim+66];
int start,finish,val,pos,maxim;
int X,A,B;
void Actualizare(int nod, int st, int dr)
{
if(st == dr)
{
maxArb[nod] = val;
return;
}
int div = (st+dr)/2;
if(pos<=div)
Actualizare(2*nod, st, div);
else
Actualizare(2*nod+1,div+1,dr);
maxArb[nod] = max(maxArb[2*nod],maxArb[2*nod+1]);
}
void Interogare(int nod, int st, int dr)
{
if(start <= st && dr <= finish)
{
if(maxArb[nod] > maxim)
maxim = maxArb[nod];
return;
}
int div = (st+dr)/2;
if(div >= start)
Interogare(2*nod,st,div);
if(div < finish)
Interogare(2*nod+1, div+1, dr);
}
int main()
{
int i,j;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>N>>M;
for(i=1;i<=N;i++)
{
f >> X;
pos = i;
val = X;
Actualizare(1,1,N);
}
for(i=1;i<=M;i++)
{
f >> X >> A >> B;
switch(X)
{
case 0:
maxim = -1;
start = A;
finish = B;
Interogare(1,1,N);
g << maxim << "\n";
break;
case 1:
pos = A;
val = B;
Actualizare(1,1,N);
}
}
}