Pagini recente » Cod sursa (job #350748) | Cod sursa (job #2525017) | Cod sursa (job #1928903) | Cod sursa (job #1081155) | Cod sursa (job #951078)
Cod sursa(job #951078)
#include<fstream>
#define NMAX 300000
using namespace std;
int v[NMAX];
int a,b;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m;
void scan()
{
in>>n>>m;
}
inline int max(int a,int b)
{
if (a>b)
return a;
return b;
}
void addToTree(int st,int dr,int k)
{
if (st==dr)
{
v[k]=a;
return;
}
int mij;
int fs,fd;
fs=2*k;
fd=fs+1;
mij=(st+dr)/2;
if (b<=mij)
{
addToTree(st,mij,2*k);
}
else addToTree(mij+1,dr,2*k+1);
if (v[fs]>v[fd])
v[k]=v[fs];
else v[k]=v[fd];
}
int searchMax(int k,int st,int dr)
{
int fs=0,fd=0,mij;
if (a<=st && dr<=b)
return v[k];
mij=(st+dr)/2;
if (a<=mij)
fs=searchMax(2*k,st,mij);
if (b>mij)
fd=searchMax(2*k+1,mij+1,dr);
if (fs<fd)
return fd;
return fs;
}
void solve()
{
int c;
for (int i=1;i<=m;i++)
{
in>>c;
if (!c)
{
in>>a>>b;
out<<searchMax(1,1,n)<<"\n";
}
else
{
in>>b>>a;
addToTree(1,n,1);
}
}
}
void add()
{
for (int i=1;i<=n;i++)
{
in>>a;
b=i;
addToTree(1,n,1);
}
}
int main()
{
scan();
add();
solve();
return 0;
}