Submission #1270959

#TimeUsernameProblemLanguageResultExecution timeMemory
1270959LucasLeMoney (IZhO17_money)C++20
100 / 100
759 ms70888 KiB
#include <bits/stdc++.h> #define fi first #define se second #define ld long double #define pii std::pair<int, int> #define piii std::pair<pii, pii> #define rep(i,a) for (int i = 0; i < a; ++i) #define per(i,a) for (int i = a - 1; i >= 0; --i) const int maxn = 1e6 + 5; const int INF = 1e9; int N; int a[maxn + 5]; int dp[maxn + 5]; struct segment_tree { int info[4 * maxn + 5]; void modify(int id, int l, int r, int pos, int x) { if (l == r) { info[id] = x; return; } int mid = (l + r) >> 1; if (pos <= mid) modify(id << 1, l, mid, pos, x); else modify(id << 1 | 1, mid + 1, r, pos, x); info[id] = std::min(info[id << 1], info[id << 1 | 1]); } int query(int id, int l, int r, int lb, int rb) { if (lb <= l && r <= rb) { return info[id]; } int mid = (l + r) >> 1; int a = INF, b = INF; if (lb <= mid) a = query(id << 1, l, mid, lb, rb); if (rb > mid) b = query(id << 1 | 1, mid + 1, r, lb, rb); return std::min(a, b); } void modify(int pos, int x) { modify(1, 1, N, pos, x); } int query(int l, int r) { return query(1, 1, N, l, r); } } ST; void solve() { std::cin >> N; for (int i = 1; i <= N; ++i) std::cin >> a[i]; for (int i = 1; i <= 4 * N; ++i) ST.info[i] = INF; ST.modify(1, 0); int pos = 1; std::set<int> s; std::vector<int> vec; for (int i = 1; i <= N; ++i) { if (a[i] < a[i - 1]) { for (int j = pos; j < i; ++j) s.insert(a[j]); pos = i; vec.clear(); } vec.push_back(a[i]); // [pos...i] int val = 0; auto ptr = s.lower_bound(a[i]); if (ptr != s.begin()) { ptr--; val = *ptr; } int vt = lower_bound(vec.begin(), vec.end(), val) - vec.begin(); dp[i] = ST.query(pos + vt, i) + 1; if (dp[i] != INF) ST.modify(i + 1, dp[i]); } std::cout << dp[N] << '\n'; } int main() { // std::freopen("input.txt", "r", stdin); // std::freopen("palin.inp", "r", stdin); // std::freopen("sushi.out", "w", stdout); std::ios_base::sync_with_stdio(false); std::cin.tie(0); int T = 1; // std::cin >> T; while (T--) solve(); } // 14 / 2 (87.5% Rate)
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...