题意
给出n(300000),最初状态表示n个0.
然后给出n个数,表示依次把ai位置置为1.
输出最初和每次变换后的扫描次数.
扫描次数为除了末尾连续的1之外1的个数+1.
解法
一个变量last记录末尾有几个连续的1,ans=i-last+1.
每次置换时,倒序扫描,总扫描次数不会超过n,可行.
其他
比赛时抽风,居然模拟链表……
代码
/* LittleFall : Hello! */
#include <bits/stdc++.h>
using namespace std;
int save[300016];
int main(void)
{
int n,last=0,tmp;
scanf("%d",&n);
printf("%d\n",1 );
for(int rounds=1;rounds<=n;rounds++)
{
scanf("%d",&tmp);
save[tmp]=1;
while(last<=n&&save[n-last]==1)
last++;
printf("%d\n",rounds-last+1 );
}
return 0;
}