Submission #1168043

#TimeUsernameProblemLanguageResultExecution timeMemory
1168043altern23Money (IZhO17_money)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double const ll N = 1e5; const ll INF = 4e18; const ll MOD = 998244353; struct ST{ ll n; vector<ll> sg; ST(ll _n){ n = _n; sg = vector<ll> (4 * n + 5, INF); } void upd(ll l, ll r, ll cur, ll idx, ll val){ if(l == r) sg[cur] = val; else{ ll mid = (l + r) / 2; if(idx <= mid) upd(l, mid, cur * 2, idx, val); else upd(mid + 1, r, cur * 2 + 1, idx, val); sg[cur] = min(sg[cur * 2], sg[cur * 2 + 1]); } } ll query(ll l, ll r, ll cur, ll x, ll y){ if(l > y || r < x) return INF; if(l >= x && r <= y) return sg[cur]; ll mid = (l + r) / 2; return min(query(l, mid, cur * 2, x, y), query(mid + 1, r, cur * 2 + 1, x, y)); } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll n; cin >> n; vector<ll> a(n + 5); for(int i = 1; i <= n; i++) cin >> a[i]; vector<pii> segs; ll lst = 1; for(int i = 1; i <= n; i++){ if(a[i] < a[i - 1]){ segs.push_back({lst, i - 1}); lst = i; } } segs.push_back({lst, n}); ST sg(n); for(auto [i, j] : segs){ ll lst = a[i]; for(int k = i + 1; k <= j; k++){ if(sg.query(1, n, 1, a[k - 1], a[k]) < lst){ sg.upd(1, n, 1, a[k - 1], lst); lst = a[k]; } } sg.upd(1, n, 1, a[j], lst); } ll ans = 0; for(int i = 1; i <= n; i++){ ans += (sg.query(1, n, 1, i, i) != INF); } cout << ans << "\n"; } } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...