Submission #1141197

#TimeUsernameProblemLanguageResultExecution timeMemory
1141197SmuggingSpunFinancial Report (JOI21_financial)C++20
31 / 100
2073 ms116424 KiB
#include<bits/stdc++.h>
#define taskname "B"
using namespace std;
template<class T>bool maximize(T& a, T b){
	if(a < b){
		a = b;
		return true;
	}
	return false;
}
int n, d;
namespace sub1{
	void solve(){
		vector<int>a(n);
		for(int& x : a){
			cin >> x;
		}
		int ans = 0;
		for(int mask = (1 << n) - 1; mask > 0; mask--){
			vector<int>index;
			for(int i = 0; i < n; i++){
				if(1 << i & mask){
					if(!index.empty() && i - index.back() > d){
						index.clear();
						break;
					}
					index.emplace_back(i);
				}
			}
			if(!index.empty() && index.back() == n - 1){
				int cnt = 0, cur_max = -1;
				for(int& x : index){
					if(maximize(cur_max, a[x])){
						cnt++;
					}
				}
				maximize(ans, cnt);
			}
		}
		cout << ans;
	}
}
namespace sub5{
	const int LIM = 1e9 + 5;
	void solve(){
		map<int, int>bit;
		auto update = [&] (int p, int x){
			for(p++; p < LIM; p += p & -p){
				maximize(bit[p], x);
			}
		};
		auto get = [&] (int p){
			int ans = 0;
			for(; p > 0; p -= p & -p){
				auto it = bit.find(p);
				if(it != bit.end()){
					maximize(ans, it->second);
				}
			}	
			return ans;
		};
		for(int i = 0; true; i++){
			int x;
			cin >> x;
			int LIS = get(x) + 1;
			update(x, LIS);
			if(i + 1 == n){
				cout << get(LIM - 1);
				break;
			}
		}
	}
}
namespace sub4{
	void solve(){
		vector<int>a(n);
		for(int& x : a){
			cin >> x;
		}
		vector<int>dp(n + 1);
		dp[n] = 0;
		stack<int>st;
		for(int i = n - 1; i > -1; st.push(i--)){
			while(!st.empty() && a[st.top()] <= a[i]){
				st.pop();
			}
			dp[i] = dp[st.empty() ? n : st.top()] + 1;
		}
		cout << *max_element(dp.begin(), dp.end());
	}
}
namespace sub236{
	void solve(){
		
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	if(fopen(taskname".inp", "r")){
		freopen(taskname".inp", "r", stdin);
	}
	cin >> n >> d;
	if(n <= 20){
		sub1::solve();
	}
	else if(d == 1){
		sub4::solve();
	}
	else if(d == n){
		sub5::solve();
	}
	else{
		sub236::solve();
	}
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:100:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...