Pagini recente » Cod sursa (job #118948) | Cod sursa (job #2198633) | Cod sursa (job #10429) | Cod sursa (job #1711588) | Cod sursa (job #521669)
Cod sursa(job #521669)
#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;x=poz;
for (;x<=n ; x+= x&-x)
if (aib[x]==poz)
{
y=querry(x-x&-x+1,x-1);
if (a[poz]<a[y])
aib[x]=y;
}
else
if (a[aib[x]]<a[poz])
aib[x]=poz;
}
int main()
{
int i,x,y,m,op;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
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<<querry (x,y)<<"\n";
else
{
a[x]=y;
update(x);
}
}
f.close();
g.close();
return 0;
}