Submission #1283865

#TimeUsernameProblemLanguageResultExecution timeMemory
1283865Ekber_EkberMoney (IZhO17_money)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h> #define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define int long long #define endl "\n" #define ff first #define ss second #define pb push_back #define all(v) v.begin(), v.end() using namespace std; constexpr int MAX = 2e+5 + 1, INF = 2e+16, MOD = 1e+9 + 7, K = 31; int compress(vector <int> &v) { int n = v.size(); vector <pair<int, int>> x; for (int i=0; i < n; i++) x.pb({v[i], i}); sort(all(x)); int nxt=1; for (int i=0; i < n-1; i++) { if (x[i].ff == x[i+1].ff) x[i].ff = nxt; else x[i].ff = nxt++; } x.back().ff = nxt; for (auto &i : x) v[i.ss] = i.ff; return nxt; } struct SegTree{ int n; vector <int> a, t; void init(int n1) { n = n1; t.assign(4*(n+2), 0); } int merge(int a, int b) { return a + b; // TODO } int find(int v, int tl, int tr, int l, int r) { if (l > r) return 0; // TODO if (tl == l && tr == r) return t[v]; int tm = (tl + tr) / 2; int r1 = find(v*2, tl, tm, l, min(r, tm)); int r2 = find(v*2+1, tm+1, tr, max(l, tm+1), r); return merge(r1, r2); } void update(int v, int tl, int tr, int i, int x) { if (tl == tr) { t[v] = x; return; } int tm = (tl + tr) / 2; if (i <= tm) update(v*2, tl, tm, i, x); else update(v*2+1, tm+1, tr, i, x); t[v] = merge(t[v*2], t[v*2+1]); } int get(int l, int r) { return find(1, 0, n-1, l, r); } void upd(int i, int x) { update(1, 0, n-1, i, x); } }; void _() { int n; cin >> n; vector <int> v(n); for (int &i : v) cin >> i; compress(v); SegTree t; t.init(n+1); vector <int> dp(n, INF); dp[0] = 1; t.upd(v[0], 1); for (int i = 1; i < n; i++) { dp[i] = dp[i-1] + 1; for (int j = i-1; j >= 0; j--) { if (v[j] <= v[j+1] && t.get(v[j]+1, v[i]-1) == 0) { dp[i] = min(dp[i], dp[j]); } else break; } t.upd(v[i], 1); } // cerr << endl; // for (int &i : dp) cerr << i << ' '; cout << dp[n-1]; } signed main() { GOOD_LUCK int tests=1; // cin >> tests; for (int i=1; i <= tests; i++) { _(); cout << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...