codevs 4909 寂寞的堆(写的好丑0.0)

时间:2021-09-18 01:45:29
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll n,num,ans,hou[],f[],c[],size;
struct node
{
ll l,r,data;
}t[];
void Hou(ll p)
{
if(p)
{
Hou(t[p].l);
Hou(t[p].r);
if(t[p].data)
hou[++num]=t[p].data;
}
}
ll lon()
{
ll i,x;
for(i=;i<=num;i++)
{
x=hou[i];
if(x>c[size])
{
c[++size]=x;
continue;
}
int mm,l=,r=size,ans;
while(l<=r)
{
mm=(l+r)/;
if(x>c[mm])
{
ans=mm;
l=mm+;
}
else r=mm-;
}
c[ans+]=x;
}
return size;
}
int main()
{
scanf("%lld",&n);
ll x;
for(ll i=;i<=n;i++)
{
ll sum=;
while(~scanf("%lld",&x))
{
++num;
sum++;
t[num].data=x;
t[num].l=num*;
t[num].r=num*+;
if(sum>pow(,i-))break;
}
}
num=;
Hou();
ans=lon();
printf("%lld\n",num-ans);
return ;
}