Submission #763376

#TimeUsernameProblemLanguageResultExecution timeMemory
763376vjudge1Financial Report (JOI21_financial)C++17
5 / 100
49 ms3920 KiB
// #cheat_when_I_was_young
// #cheatkhitacontre #khionhatoicheat
// #thaycuckythatvong
#include "bits/stdc++.h"
using namespace std;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma")
const int NM = 3e5 + 5;
int n, d, a[NM], res;
vector<int> lis, tmp = {0};
int value() {
    int m = tmp.size();
    int ma[m+1];
    ma[0] = 0;
    for (int i = 1; i <= m; ++i) ma[i] = max(ma[i-1], tmp[i]);
    int ans = 0;
    for (int i = 1; i <= m; ++i) if (tmp[i] > ma[i-1]) ++ans;
    return ans;
}
void backtrack(int x) {
    if (x == n) {
        tmp.push_back(a[n]);
        res = max(res, value());
        tmp.pop_back();
        return;
    }
    backtrack(x+1);
    tmp.push_back(a[x]);
    backtrack(x+1);
    tmp.pop_back();
}
signed main() {
	IOS;
	cin >> n >> d;
	for (int i = 1; i <= n; ++i) cin >> a[i];
	if (n <= 20) {
        backtrack(1);
        cout << res - 1;
        return 0;
	}
	if (d == n) {
        for (int i = 1; i <= n; ++i) {
            if (!lis.size() || lis.back() < a[i]) lis.push_back(a[i]);
            else *lower_bound(lis.begin(), lis.end(), a[i]) = a[i];
        }
        cout << lis.size();
	}
}
#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...