Submission #570861

#TimeUsernameProblemLanguageResultExecution timeMemory
570861nohaxjustsofloArranging Shoes (IOI19_shoes)C++17
100 / 100
677 ms38080 KiB
#include <bits/stdc++.h> #include <iostream> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> order_set; mt19937 mt_rand(chrono::high_resolution_clock::now().time_since_epoch().count()); //uniform_int_distribution<int> gen(-1e9, 1e8); ///(min, max) //int random() {return gen(mt_rand);} const int mxN = 1e6+50000; const int mod = 998244353; const int mxlogN = 34; const int mxK = 26; const int inf = 1e9; const int K = 100000; int cnt[mxN]; ll count_swaps(vector<int> s) { map<int, vector<int>> mp; int n=s.size(); ll ans=0; order_set os; for(int i=0; i<n; i++) mp[s[i]].push_back(i); for(int i=0; i<n; i++) { int x=abs(s[i]); int c=cnt[x]; if(os.order_of_key(i+1)-os.order_of_key(i)==1) continue; int l=min(mp[x][c], mp[-x][c]); l+=os.size()-os.order_of_key(l); int r=max(mp[x][c], mp[-x][c]); r+=os.size()-os.order_of_key(r); if(mp[-x][c]>mp[x][c]) ans++; ans+=r-l-1; cnt[x]++; os.insert(mp[x][c]); os.insert(mp[-x][c]); } return ans; } /* int main() { int n; cin >> n; vector<int> s(n); for(int i=0; i<n; i++) cin >> s[i]; cout << count_swaps(s); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...