Pagini recente » Cod sursa (job #2505114) | Cod sursa (job #1397818) | Cod sursa (job #3238827) | Borderou de evaluare (job #2292016) | Cod sursa (job #2572505)
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define f first
#define s second
int N,M,v[100005],maxx,a,b;
pair <int,pair<int,int> > c[500010];
void cer0(int poz)
{
int st,dr,mij;
st=c[poz].s.f;
dr=c[poz].s.s;
mij=(st+dr)/2;
if(a<=st && b>=dr) maxx=max(maxx,c[poz].f); ///daca este cuprins [a,b] intre st si dr
else
{
if(a<=mij) cer0(poz*2);///ramura din stanga
if(b>mij) cer0(poz*2+1);///ramura din dreapta
}
}
void build(int st,int dr,int poz)
{
int mij;
c[poz].s.f=st;
c[poz].s.s=dr;
if(st==dr) c[poz].f=v[st];
else
{
mij=(st+dr)/2;
build(st,mij,2*poz);
build(mij+1,dr,2*poz+1);
c[poz].f=max(c[2*poz].f,c[2*poz+1].f);
}
}
void afisare()
{
int i;
for(i=1; i<=9; i++) fout<<c[i].f<<" "<<c[i].s.f<<" "<<c[i].s.s<<'\n';
}
void cer1(int poz)
{
int st,dr,mij;
st=c[poz].s.f;
dr=c[poz].s.s;
if(a==st && a==dr) c[poz].f=b;
else
{
mij=(st+dr)/2;
if(a<=mij) cer1(poz*2);
else cer1(poz*2+1);
c[poz].f=max(c[2*poz].f,c[2*poz+1].f);
}
}
int main()
{
int i,opt;
fin>>N>>M;
for(i=1; i<=N; i++) fin>>v[i];
build(1,N,1);
for(i=1; i<=M; i++)
{
fin>>opt>>a>>b;
if(opt==0)
{
maxx=0;
cer0(1);
fout<<maxx<<'\n';
}
else cer1(1);
}
///afisare();
fin.close();
fout.close();
return 0;
}