제출 #758370

#제출 시각아이디문제언어결과실행 시간메모리
758370vjudge1Money (IZhO17_money)C++17
100 / 100
601 ms12540 KiB
#include <bits/stdc++.h> #include <fstream> #define endl '\n' #define mod 1000007 #define INF 100000000 //#define ll long long ///#define cin fin ///#define cout fout #define fi first #define se second using namespace std; double const EPS = 1e-14; ///ofstream fout("herding.out"); ///ifstream fin("herding.in"); const int Max = 1e6 + 5; const int M = 1e6; int seg[4*Max]; void Update(int x, int l, int r, int pos) { if(l == r) { seg[x]++; } else { int mid = (l+r)/2; if(pos <= mid) Update(x*2,l,mid,pos); else Update(x*2+1,mid+1,r,pos); seg[x] = seg[x*2]+seg[x*2+1]; } } int sol(int x, int l, int r, int L, int R) { if(l > R || r < L) { return 0; } else if(l >= L && r <= R) { return seg[x]; } else { int mid = (l+r)/2; return sol(x*2,l,mid,L,R)+sol(x*2+1,mid+1,r,L,R); } } int main() { ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0); int n; cin >> n; int arr[n], ans = 1; vector<int> v; for(int i = 0; i < n; i++) cin >> arr[i]; int last = INF; for(int i = 0; i < n; i++) { if(last == INF || (v.back() <= arr[i] && sol(1,1,M,last+1,arr[i]-1) == 0)) { if(last == INF) last = arr[i]; v.push_back(arr[i]); } else { for(int j = v.size()-1; j >= 0; j--) { // cout << v[j] << 'o' << endl; Update(1,1,M,v[j]); v.pop_back(); } last = arr[i]; v.push_back(arr[i]); ans++; } // cout << last << ' ' << v.back() << ' ' << arr[i] << 'k' << endl; // cout << sol(1,1,M,last+1,arr[i]-1) << 'h' << endl; } cout << ans; return 0; } /* 7 4 3 1 1 5 1 2*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...