Submission #1215007

#TimeUsernameProblemLanguageResultExecution timeMemory
1215007nataliaaGlobal Warming (CEOI18_glo)C++20
10 / 100
56 ms2496 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
void test_case() {
	int n,x;
	cin >> n>>x;

	int a[n];
	for(int i = 0; i < n; i++) {
		cin>>a[i];
	}
	int a1[n];
	a1[0] = 0;
	if(x==0) {
		vector<int> v;
		v.push_back(a[0]);
		for(int i = 1; i < n; i++) {
			int l =0, r = v.size();
			while(l<=r) {
				int m = (l+r)/2;
				if(v[m]>=a[i]) {
					r= m-1;
				}
				else {
					l = m+1;
				}
			}
			if(l>=v.size()) v.push_back(a[i]);
			else v[l] = a[i];
		}
		cout << v.size();
		return;
	}
	vector<int> v;
	v.push_back(a[0]);
	//------------------------------
	for(int i = 1; i < n; i++) {
		int l =0, r = v.size();
		while(l<=r) {
			int m = (l+r)/2;
			if(v[m]>=a[i]) {
				r= m-1;
			}
			else {
				l = m+1;
			}
		}
		if(l>=v.size()) v.push_back(a[i]);
		else v[l] = a[i];
		a1[i] = v.size();
	}
	
	int a2[n] ;
	a2[n-1] = 0;
	for(int i = n-2; i >= 0; i--) {
		int l =0, r = v.size();
		while(l<=r) {
			int m = (l+r)/2;
			if(v[m]<=a[i]) {
				l= m+1;
			}
			else {
				r = m-1;
			}
		}
		if(l>=v.size()) v.push_back(a[i]);
		else v[l] = a[i];
		a2[i] = v.size();
	}
	//------------------------------
	int ans = 0;
	for(int i = 0; i < n; i++) {
		ans = max(ans, a2[i]-a1[i]);
	}
	cout << ans;
}

int main() {
	int t;
	t=1;
	while (t--) test_case();
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...