Pagini recente » Cod sursa (job #1161334) | Cod sursa (job #2507689) | Cod sursa (job #2717410) | Cod sursa (job #1443297) | Cod sursa (job #445296)
Cod sursa(job #445296)
#include<fstream.h>
#include<algorithm>
using namespace std;
#define maxim(a, b) ((a > b) ? a : b)
ifstream f("arbint.in");
ofstream g("arbint.out");
int ai[280000],st[280000],dr[280000],max1[280000],v[100005],n,a,b,k;
char s[2000005];
void update ()
{
if (st[k]==dr[k])
{
ai[k]=b;
return ;
}
if (a<=dr[k<<1])
{
k<<=1;
update();
k>>=1;
}
else
{
k<<=1;
++k;
update();
k>>=1;
}
ai[k]=maxim(ai[k<<1],ai[1+(k<<1)]);
}
void querry ()
{
if (a<=st[k] && dr[k]<=b)
{
max1[k]=ai[k];
return ;
}
max1[k<<1]=-1;
max1[2*k+1]=-1;
if (a<=dr[k<<1])
{
k<<=1;
querry();
k>>=1;
}
if (b>dr[k<<1])
{
k<<=1;
k++;
querry();
k>>=1;
}
max1[k]=maxim(max1[k<<1],max1[2*k+1]);
}
void init ()
{
if (st[k]==dr[k])
{
ai[k]=v[st[k]];
return ;
}
st[k<<1]=st[k];
dr[k<<1]=(st[k]+dr[k])/2;
st[2*k+1]=dr[k<<1]+1;
dr[2*k+1]=dr[k];
k<<=1;
init();
k++;
init();
ai[k>>1]=maxim(ai[k],ai[k-1]);
k>>=1;
}
int main()
{
int i,m,op;
f>>n>>m;
f.get();
f.getline(s,2000000);
n=1;
k=strlen(s);
for (i=0;i<k;i++)
if (s[i]==' ')
++n;
else
v[n]=v[n]*10+s[i]-'0';
st[1]=1;dr[1]=n;k=1;
init();
for (i=1;i<=m;i++)
{
f>>op>>a>>b;
if (op==0)
{
k=1;
// querry();
g<<max1[1]<<"\n";
}
else
{
k=1;
// update();
}
}
f.close();
g.close();
return 0;
}