Pagini recente » Cod sursa (job #143735) | Cod sursa (job #232548) | Cod sursa (job #2068240) | Cod sursa (job #589524) | Cod sursa (job #521683)
Cod sursa(job #521683)
#include<fstream.h>
int aib[100005],a[100006],n;
int querry (int l, int r )
{
int x,y=0;
while (l<=r)
{
x=r-(r&(-r));
if (x<l)
{
x=r-1;
if (a[y]<a[r])
y=r;
}
else
if (a[y]<a[aib[r]])
y=aib[r];
r=x;
}
return y;
}
void update (int poz)
{
int x,y,z;x=poz;y=poz;
for (;x<=n ; x+= (x&(-x)))
if (aib[x]==y)
{
z=querry(x-(x&(-x))+1,x-1);
if (a[x]<a[z])
aib[x]=z;
else
aib[x]=x;
}
else
if (a[aib[x]]<a[y])
aib[x]=y;
}
int main()
{
int i,x,y,m,op;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
//aib[0]=-1;
for (i=1;i<=n;i++)
{
f>>a[i];
update (i);
}
for (i=1;i<=m;i++)
{
f>>op>>x>>y;
if (op==0)
g<<a[querry (x,y)]<<"\n";
else
{
a[x]=y;
update(x);
}
}
f.close();
g.close();
return 0;
}