Submission #635014

#TimeUsernameProblemLanguageResultExecution timeMemory
635014minhcool즐거운 채소 기르기 (JOI14_growing)C++17
100 / 100
247 ms40812 KiB
//#include "ramen.h" #include<bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pb push_back //#define mp make_pair #define foru(i, l, r) for(int i = l; i <= r; i++) #define ford(i, r, l) for(int i = r; i >= l; i--) typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 4e5 + 5; const int oo = 1e18 + 7, mod = 1e9 + 7; int n, a[N]; int BIT[N]; void upd(int id, int val){ for(; id <= n; id += id & -id) BIT[id] += val; } int gett(int id){ int ans = 0; for(; id; id -= id & -id) ans += BIT[id]; return ans; } int get(int l, int r){ return gett(r) - gett(l - 1); } map<int, vector<int>> mp; void process(){ cin >> n; for(int i = 1; i <= n; i++){ cin >> a[i]; mp[a[i]].pb(i); //vc.pb({a[i], i}); } //sort(vc.begin(), vc.end(), cmp); for(int i = 1; i <= n; i++) upd(i, 1); int answer = 0; for(auto it : mp){ //cout << it.fi << "\n"; deque<int> dq; vector<int> temp = it.se; sort(temp.begin(), temp.end()); for(auto it : temp) dq.push_back(it); while(!dq.empty()){ int pos1 = dq.front(), pos2 = dq.back(); int temp1 = get(1, pos1 - 1), temp2 = get(pos2 + 1, n); //cout << temp1 << " " << temp2 << "\n"; if(temp1 < temp2){ upd(pos1, -1); dq.pop_front(); } else{ upd(pos2, -1); dq.pop_back(); } answer += min(temp1, temp2); } //cout << answer << "\n"; } /* for(auto it : vc){ while(vc[itr].fi > it.fi){ upd(vc[itr].se, 1); itr++; } //cout << it.fi << " " << it.se << " " << itr << " " << get(it.se - 1) << " ""\n"; answer += min(get(it.se - 1), get(n) - get(it.se)); }*/ cout << answer; } signed main(){ ios_base::sync_with_stdio(0); process(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...