Pagini recente » Cod sursa (job #1700823) | Cod sursa (job #1136404) | Cod sursa (job #785861) | Cod sursa (job #1527805) | Cod sursa (job #2572366)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int v[100010], n, m, a, b, maxx, cer;
pair< pair<int, int>, int >arb[500010];
void construire(int nod, int st, int dr)
{
int mij;
arb[nod].first.first = st;
arb[nod].first.second = dr;
if(st!=dr)
{
mij = (st+dr)/2;
construire(2*nod, st, mij);
construire(2*nod+1, mij+1, dr);
arb[nod].second = max( arb[2*nod].second, arb[2*nod+1].second );
}
else
arb[nod].second = v[st];
}
void maxim(int nod)
{
int st, dr, mij;
st = arb[nod].first.first;
dr = arb[nod].first.second;
if(a<=st && dr<=b) //daca st si dr se afla in intervalul (a, b)
{
maxx = max(maxx, arb[nod].second);
}
else
{
mij = (st+dr)/2;
if(a<=mij)
maxim(2*nod);
if(b>mij)
maxim(2*nod+1);
}
}
void actualizare(int nod)
{
int st, dr, mij;
st = arb[nod].first.first;
dr = arb[nod].first.second;
if(a==st && a==dr)
arb[nod].second = b;
else
{
mij = (st+dr)/2;
if(a<=mij)
actualizare(2*nod);
else
actualizare(2*nod+1);
arb[nod].second = max(arb[2*nod].second, arb[2*nod+1].second);
}
}
int main()
{
int i;
fin>>n>>m;
for(i=1; i<=n; i++)
{
fin>>v[i];
}
construire(1, 1, n);
for(i=1; i<=m; i++)
{
fin>>cer>>a>>b;
if(cer==0)
{
maxx = 0;
maxim(1);
fout<<maxx<<'\n';
}
else
actualizare(1);
}
fin.close();
fout.close();
return 0;
}