Codeforces Round #441 D. Sorting the Coins(模拟)

时间:2020-12-26 14:39:31

http://codeforces.com/contest/876/problem/D

题意:
题意真是难懂,就是给一串序列,第i次操作会在p[x](1<=x<=i)这些位置放上硬币,然后从左到右观察,如果第i个位置有硬币但第i+1个位置没有硬币,那么互换,然后继续从第i+1个硬币开始看。直到不需要交换,需要计算出到终极状态需要多少步。

思路:

模拟。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = +; int n;
int p[maxn];
int a[maxn];
vector<int> ans; int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n))
{
ans.clear();
memset(a,,sizeof(a));
for(int i=;i<=n;i++) scanf("%d",&p[i]);
int max_right=n;
int cnt=;
for(int i=;i<=n;i++)
{
a[p[i]]=;
if(p[i]==max_right)
{
for(int j=max_right-;j>=;j--)
{
if(!a[j]) {max_right=j;break;}
else cnt--;
}
}
else
{
cnt++;
}
ans.push_back(cnt+);
}
printf("");
for(int i=;i<ans.size();i++)
printf(" %d",ans[i]);
printf("\n");
}
return ;
}