Mai intai trebuie sa te autentifici.
Cod sursa(job #2190183)
| Utilizator | Data | 29 martie 2018 22:32:01 | |
|---|---|---|---|
| Problema | Arbori de intervale | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.96 kb |
#include <bits/stdc++.h>
using namespace std;
int n,m,i,j,val,b,t[2000000],a,c,M;
void update(int nod,int x,int y)
{
if (x==y) t[nod]=val;
else
{
int mid=(x+y)/2;
if (i>mid) update(nod*2+1,mid+1,y);
else update(nod*2,x,mid);
t[nod]=max(t[nod*2],t[nod*2+1]);
}
}
void maxim(int nod,int x,int y)
{
if (a<=x && y<=b){ if (M<t[nod]) M=t[nod]; }else
{
int mid=(x+y)/2;
if (mid>=a) maxim(nod*2,x,mid);
if (mid<b) maxim(nod*2+1,mid+1,y);
}
}
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
fin>>n>>m;
for (i=1;i<=n;i++)
{
fin>>val;
update(1,1,n);
}
for (j=1;j<=m;j++)
{
fin>>c>>a>>b;
if (c==1) {i=a; val=b; update(1,1,n);} else
{
M=0;
maxim(1,1,n);
fout<<M<<"\n";
}
}
return 0;
}
