Submission #91123

#TimeUsernameProblemLanguageResultExecution timeMemory
91123emil_physmathMoney (IZhO17_money)C++14
100 / 100
1498 ms95396 KiB
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;

int a[1000005], dp[1000005], l[1000005];

int main()
{
	int n;
	cin>>n;
	for (int k=0; k<n; k++)
		scanf("%d", a+k);
	set<int>curSorted;
	curSorted.insert(0);
	curSorted.insert(10000000);
	for (int i=0; i<n; i++)
	{
		l[i]=i;
		if (i && a[i-1]<=a[i])
			l[i]=l[i-1];
		for (int k=(i?l[i-1]:0); k<l[i]; k++)
			curSorted.insert(a[k]);
		dp[i]=i+1;
		auto rBound=curSorted.lower_bound(a[i]);
		int minVal=*--rBound;
		int k=lower_bound(a+l[i], a+i+1, minVal)-a;
		for (k; k<=i; k++)
			dp[i]=min(dp[i], (k?dp[k-1]:0)+1);
	}
	cout<<dp[n-1]<<'\n';
	//int i=0, ans=0;
	//set<int> curSorted;
	//curSorted.insert(0);
	//curSorted.insert(10000000);
	//while (i<n)
	//{
	//	ans++;
	//	int j=i;
	//	while (j+1<n && a[j+1]>a[j])
	//		j++;
	//	auto rBound=curSorted.upper_bound(a[i]);
	//	j=upper_bound(a+i, a+j+1, *rBound)-a;
	//	for (int k=i; k<j; k++)
	//		curSorted.insert(a[k]);
	//	i=j;
	//}
	//cout<<ans<<'\n';

	char I;
	cin >> I;
	return 0;
}
/*
9
2 5 4 3 5 6 4 6 7
5
1 2 4 3 5
*/

Compilation message (stderr)

money.cpp: In function 'int main()':
money.cpp:29:9: warning: statement has no effect [-Wunused-value]
   for (k; k<=i; k++)
         ^
money.cpp:14:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", a+k);
   ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...