Pagini recente » Cod sursa (job #611222) | Cod sursa (job #2604812) | Cod sursa (job #1975330) | Cod sursa (job #2935903) | Cod sursa (job #2712516)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("arbint.in");
ofstream g ("arbint.out");
/// memoria se declara 4 * n
int arbore[400001];
int v[100001];
int n,q,poz_final,mx_rasp;
void gasire_mx(int st_arb,int dr_arb,int st,int dr,int poz)
{
/// daca intervalul din arbore e inclus in intervalul cautat
int mij = (st_arb+dr_arb)/2;
if(st_arb >=st && dr_arb<=dr)
{
mx_rasp = max(arbore[poz],mx_rasp);
return;
}
if(st_arb == dr_arb)
return;
if(st<=mij)
{
gasire_mx(st_arb,mij,st,dr,poz*2);
}
if(mij<=dr)
{
gasire_mx(mij+1,dr_arb,st,dr,poz*2+1);
}
}
void update(int st,int dr,int poz)
{
if(st == dr)
{
poz_final = max(poz,poz_final);
arbore[poz] = v[st];
return;
}
update(st,(st+dr)/2,poz*2);
update((st+dr)/2+1,dr,poz*2+1);
arbore[poz] = max(arbore[poz*2],arbore[poz*2+1]);
}
int main()
{
f >> n >> q;
for(int i = 1; i<=n; i++)
{
f >> v[i];
}
update(1,n,1);
int st,dr,c;
for(int i = 1; i<=q; i++)
{
f >> c>>st >> dr;
if(c == 0)
{
mx_rasp = 0;
gasire_mx(1,n,st,dr,1);
g << mx_rasp <<'\n';
}
else
{
v[st] = dr;
update(1,n,1);
}
}
}