제출 #757940

#제출 시각아이디문제언어결과실행 시간메모리
757940jer033Fruits (NOI22_fruits)C++17
5 / 100
237 ms15048 KiB
#include <algorithm>
#include <iostream>

int assigned[400005];
long long costs[400005];
long long answer[400005];
int available[400005];

using namespace std;

int main()
{
	int n;
	cin >> n;
	int subtwo=1;
	for (int i=1; i<=n; i++)
	{
		available[i]=1;
	}
	for (int i=1; i<=n; i++)
	{
		cin >> assigned[i];
		if (assigned[i]>0)
		{
			subtwo=0;
			available[assigned[i]]=0;
		}
	}
	if (subtwo)
	{
		answer[0]=0;
		for (int i=1; i<=n; i++)
		{
			cin >> costs[i];
			answer[i]=answer[i-1]+costs[i];
		}
		for (int i=0; i<n; i++)
		{
			cout << answer[n]-answer[n-1-i];
			if (i!=(n-1))
				cout << ' ';
			else
				cout << '\n';
		}
	}
	else
	{
		//let's assume subtask 5 holds
		int index=1;
		int curr=1;
		while (curr<=n)
		{
			if (assigned[index]>0)
			{
				curr=max(curr, assigned[index]);
			}
			else
			{
				while (available[curr]==0 and curr<=n)
					curr++;
				if (curr<=n)
				{
					assigned[index]=curr;
					curr++;
				}
			}
			index++;
		}
		//once curr=n+1 all remaining fruit assignments don't really matter anymore
		//you can keep them at -1, since they won't be bought by Benson anyways
		answer[0]=0;
		int max=0;
		for (int i=1; i<=n; i++)
		{
			answer[i]=answer[i-1];
			if (assigned[i]>max)
			{
				max=assigned[i];
				answer[i]++;
			}
		}
		for (int i=1; i<=n; i++)
		{
			cout << answer[i];
			if (i!=n)
				cout << ' ';
			else
				cout << '\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...