Submission #124516

#TimeUsernameProblemLanguageResultExecution timeMemory
124516MoNsTeR_CuBeOrchard (NOI14_orchard)C++17
13 / 25
112 ms33656 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long 

const int INF = 1e18;

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int n, m;
	cin >> n >> m;
	
	if(n == 1){
		vector< int > v(m+1);
		
		vector< int > dp(m+1);
		
		vector< int > one(m+1);
		
		vector< int > zero(m+1);
		
		
		
		for(int i = 1; i <= m; i++){
			cin >> v[i];
			zero[i] += zero[i-1];
			one[i] += one[i-1];
			
			zero[i] += (v[i] == 0);
			one[i] += (v[i] == 1);
		}
		
		dp[0] = -INF;
		
		int mini = INF;
		
		for(int i = 1; i <= m; i++){
			//cout << "NUMBER " << i << ' ' << "MINI " << mini << endl;
			if(mini + zero[i] < one[i-1] + (v[i] == 0)){
				dp[i] = mini + zero[i];
				if(dp[i]-zero[i-1] <= mini){
					mini = dp[i]-zero[i-1];
				}
			}else{
				dp[i] = one[i-1] + (v[i] == 0);
				if(dp[i]-zero[i-1] <= mini){
					mini = dp[i]-zero[i-1];
				}
			}
			//cout << "DP " << dp[i] << endl;
		}
		int ans = INF;
		
		for(int i = 1; i <= m; i++){
			ans = min(ans, one[m]-one[i] + dp[i]);
		}
		cout << ans << endl;
	}
}
#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...