Pagini recente » Cod sursa (job #3243979) | Cod sursa (job #922766) | Cod sursa (job #842951) | Cod sursa (job #2068832) | Cod sursa (job #1329784)
#include <fstream>
#define DIM 100001
#define inf 0x3f3f3f
using namespace std;
int p, v, arbint[DIM], n, m, tip, result;
int inclus(int a, int b, int c)
{
if(a<=c&&b>=c)
return 1;
else return 0;
}
int maxim(int a, int b)
{
if(a>b)
return a;
else return b;
}
void update(int l, int r, int nod)
{
if(l==r&&l==p)
{
arbint[nod]=v;
}
else
{
if(inclus(l, (l+r)/2, p))
{
update(l, (l+r)/2, 2*nod);
}
else
{
update((l+r)/2+1, r, 2*nod+1);
}
arbint[nod]=maxim(arbint[2*nod], arbint[2*nod+1]);
}
}
int find(int l, int r, int nod)
{
int mij=(l+r)/2;
if(p<=l&&v>=r)
{
result = maxim (result, arbint[nod]);
}
else
{
if(p<=mij)
{
find(l, mij, 2*nod);
}
if(mij<v)
{
find(mij+1, r, 2*nod+1);
}
}
return result;
}
int main()
{
ifstream in ("arbint.in");
ofstream out("arbint.out");
in>>n>>m;
p=1;
for(int i=1; i<=n; ++i, ++p)
{
in>>v;
update(1, n, 1);
}
for(int i=1; i<=m; ++i)
{
in>>tip>>p>>v;
if(!tip)
{
result=0;
out<<find(1, n, 1)<<"\n";
}
else update(1, n, 1);
}
in.close();
out.close();
return 0;
}