Submission #255949

#TimeUsernameProblemLanguageResultExecution timeMemory
255949b00n0rpArranging Shoes (IOI19_shoes)C++17
100 / 100
111 ms22136 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define vi vector<int> #define pb push_back #define REP(i,n) for(int i = 0; i < n; i++) #define FOR(i,a,b) for(int i = a; i < b; i++) int n; vi a; ll ans = 0; bool paired(int ind){ if(ind >= 2*n-1 or ind < 0) return 0; return (a[ind]+a[ind+1] == 0 and a[ind] < a[ind+1]); } int last[200005]; bool exis[200005]; vi gg1[200005],gg2[200005]; int seg[400005]; void upd(int ind,int val){ ind += 2*n; while(ind){ seg[ind] += val; ind /= 2; } } int quer(int l,int r){ l += 2*n; r += 2*n+1; int res = 0; while(l < r){ if(l%2) res += seg[l++]; if(r%2) res += seg[--r]; l /= 2; r /= 2; } return res; } ll count_swaps(vector<int> s) { n = s.size()/2; a = s; REP(i,2*n){ if(a[i] < 0) gg1[-a[i]].pb(i); else gg2[a[i]].pb(i); } int cur = 1; FOR(i,1,n+1){ REP(j,(int)gg1[i].size()){ a[gg1[i][j]] = -cur; a[gg2[i][j]] = cur; cur++; } } REP(i,2*n){ if(exis[n-a[i]]){ ans += i-last[n-a[i]]-1; if(a[i] < 0) ans++; ans -= quer(0,last[n-a[i]]); upd(last[n-a[i]],1); upd(i,-1); exis[n+a[i]] = 0; exis[n-a[i]] = 0; } else{ exis[n+a[i]] = 1; last[n+a[i]] = i; } // cout << i << " " << ans << endl; } return ans; }
#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...