Pagini recente » Cod sursa (job #2194017) | Cod sursa (job #460030) | Cod sursa (job #1869097) | Cod sursa (job #1371539) | Cod sursa (job #1154557)
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 100010
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define MAX 10000
int a[2*MAX];
//se citeste un sir de numere si doua tipuri de operatii
//0 x y
//val de pe poz x devine y
//1 x y
//afisati maximul din intervalul (x, y)
int Pos, Val, start, end;
void Update(int nod, int st, int dr)
{
if(st==dr)
{
a[nod]=Val;
return;
}
int ma=st+dr;
ma>>=1;
if(Pos<=ma)
Update(2*nod, st, ma);
else
Update(2*nod+1, ma+1, dr);
a[nod]=max(a[nod*2], a[nod*2+1]);
}
int Query(int nod, int st, int dr)
{
if(start<=st && dr<=end)
{
return a[nod];
}
if(end<st || dr<start)
{
return -1;
}
int ma=(st+dr)>>1;
return max(Query(2*nod, st, ma), Query(2*nod+1, ma+1, dr));
}
int main()
{
int n, m;
fin>>n>>m;
int i, x, b, y;
for(i=1;i<=n;i++)
{
fin>>x;
Pos=i;
Val=x;
Update(1, 1, n);
}
while(m--)
{
fin>>b>>x>>y;
if(b==1)
{
Pos=x;
Val=y;
Update(1, 1, n);
}
else
{
start=x;
end=y;
fout<<Query(1, 1, n)<<"\n";
}
}
return 0;
}