제출 #1284121

#제출 시각아이디문제언어결과실행 시간메모리
1284121Ekber_EkberMoney (IZhO17_money)C++20
100 / 100
128 ms31912 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; struct BIT{ int n; vector <int> t; void init(int n1) { n = n1; t.assign(n+1, 0); } int get(int l, int r) { if (l > r) return 0; if (l != 1) return get(1, r) - get(1, l-1); int res=0; while (r >= 1) { res += t[r]; r -= (r & (-r)); } return res; } void upd(int i, int x) { while (i <= n) { t[i] += x; i += (i & (-i)); } } }; void _() { int n; cin >> n; vector <int> v(n); for (int &i : v) cin >> i; vector <int> p = v; BIT t; t.init(1000005); vector <int> dp(n, 0); dp[0] = 1; vector <int> x = {v[0]}; for (int i = 1; i < n; i++) { dp[i] = dp[i-1] + 1; if (v[i] == v[i-1]) { dp[i] = dp[i-1]; p[i] = p[i-1]; } else if (v[i] > v[i-1] && t.get(p[i-1] + 1, v[i] - 1) == 0) { dp[i] = dp[i-1]; p[i] = p[i-1]; } else { for (int &j : x) t.upd(j, 1); x.clear(); } x.pb(v[i]); } // 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...