Pagini recente » Cod sursa (job #2535686) | Cod sursa (job #3159074) | Cod sursa (job #3244763) | Cod sursa (job #1859732) | Cod sursa (job #2901100)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long long n,m,op,v[100001];
struct nod{
long long lower,upper,mx,nr;
};
nod arb[4*100001];
void create_nod(long long st,long long dr,long long nr)
{
if(st == dr) {
if(nr == 0 || nr != arb[nr].nr)
arb[nr].mx = v[dr];
arb[nr].lower = st;
arb[nr].upper = st;
arb[nr].nr = nr;
return;
}
else
{
long long mij = (st+dr)/2;
create_nod(st,mij,2*nr+1);
create_nod(mij+1,dr,2*nr+2);
arb[nr].mx = max(arb[2*nr+1].mx,arb[2*nr+2].mx);
arb[nr].lower = arb[2*nr+1].lower;
arb[nr].upper = arb[2*nr+2].upper;
arb[nr].nr = nr;
}
}
long long maxim(long long i,long long j,long long nr)
{
if(j<arb[nr].lower || i> arb[nr].upper)
return 0;
if(i<= arb[nr].lower && j>= arb[nr].upper)
return arb[nr].mx;
return max(maxim(i,j,nr*2+1), maxim(i,j,nr*2+2));
}
void update(long long a,long long b,long long nr) {
if(a<arb[nr].lower || a>arb[nr].upper)
return;
else if(arb[nr].lower == arb[nr].upper)
{arb[nr].mx = b;return;}
update(a,b,nr*2+1);
update(a,b,nr*2+2);
arb[nr].mx = max(arb[2*nr+1].mx,arb[2*nr+2].mx);
}
int main()
{
f>>n>>m;
long long i;
long long nr = 0;
for(i = 0;i<n;i++)
{
f>>v[i];
}
long long a,b;
create_nod(0,n-1,0);
for(i = 0;i<m;i++)
{
f>>op>>a>>b;
switch (op) {
case 0: {
g<<maxim(a-1, b-1,0)<<'\n';
break;
}
case 1: {
update(a-1, b,0);
break;
}
}
}
f.close();g.close();
}