Cod sursa(job #2421742)

Utilizator Nemo123456nichita Nemo123456 Data 15 mai 2019 22:02:48
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;

ifstream cin("arbint.in");
ofstream cout("arbint.out");

int n,m,a[300000],val,pos,s,f,maxim;

void schimba(int nod,int l,int r)
{
	if(l==r) {a[nod]=val;return;}
	int mid= (l+r)/2;
	if(pos<=mid) schimba(2*nod,l,mid);
		else schimba(2*nod+1,mid+1,r);
	a[nod] = max(a[nod*2],a[nod*2+1]);
}

void arata(int nod,int l,int r)
{
    if (s<=l && r<=f)
     	{
          if ( maxim < a[nod] ) maxim = a[nod];
          return;
     	}
     
    int mid = (l+r)/2;
    if (s<=mid) arata(2*nod,l,mid);
    if (mid<f) arata(2*nod+1,mid+1,r);
}


int main()
{
	int al,ar,x;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		{
			cin>>val;
			pos=i;
			schimba(1,1,n);
		}
	
	for(int i=1;i<=m;i++)
		{
			cin>>x>>al>>ar;
			if(x==0)
				{
					maxim=-1;	
					s=al;
					f=ar;
					arata(1,1,n);
					cout<<maxim<<'\n';				
				}
			else
				{
					pos=al;
					val=ar;
					schimba(1,1,n);
				}
		}

}