显示代码纯文本
/*
ID:satoshi
TASK:highcard
LANG:C++
*/
#include <fstream>
#include <algorithm>
#include <set>
#include <functional>
#define N 100010
using namespace std;
ifstream cin("highcard.in");
ofstream cout("highcard.out");
bool l[N]={0};
int n,ans=0;
int pre[N]={0},suffix[N]={0};
int S[N]={0};
set<int> A;
set<int,greater<int> >B;
void read()
{
int i,x;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
S[i]=x;
l[x]=1;
}
for(i=1;i<=2*n;i++)
{
if(!l[i])
{
A.insert(i);
B.insert(i);
}
}
}
void work()
{
int i,tot;
set<int>::iterator it;
set<int,greater<int> >::iterator ot;
tot=0;
for(i=1;i<=n;i++)
{
it=A.upper_bound(S[i]);
if(it==A.end())A.erase(A.begin());//以小抵大
else
{
A.erase(it);
tot++;
}
pre[i]=tot;
}
tot=0;
for(i=n;i>=1;i--)
{
ot=B.upper_bound(S[i]);
if(ot==B.end())B.erase(B.begin());
else
{
B.erase(ot);
tot++;
}
suffix[i]=tot;
}
cout<<pre[n]<<endl;
}
int main()
{
read();
work();
return 0;
}