Submission #1274181

#TimeUsernameProblemLanguageResultExecution timeMemory
1274181hgmhcArranging Shoes (IOI19_shoes)C++20
50 / 100
65 ms22116 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ii = pair<ll,ll>; using vi = vector<ll>; #define rep(i,a,b) for (ll i = (a); i <= (b); ++i) #define per(i,a,b) for (ll i = (b); i >= (a); --i) #define all(x) (x).begin(), (x).end() #define siz(x) ll((x).size()) #define Mup(x,y) (x = max(x,y)) #define mup(x,y) (x = min(x,y)) #define fi first #define se second #define pb push_back #define dbg(...) fprintf(stderr,__VA_ARGS__) // #define int do not use int const int N = 1e5 + 3; struct T { set<ll> POS[N+N]; auto &operator [] (int idx) { return POS[N+idx]; } } pos; struct BIT { ll t[2*N+2]; void add(int k, ll x) { for(++k; k<=N; k+=k&-k) t[k]+=x; } ll sum(int l, int r) { ll res=0; for(; l; l-=l&-l) res-=t[l]; for(++r; r; r-=r&-r) res+=t[r]; return res; } } ds; ll count_swaps(vector<int> s) { ll n = siz(s), cnt=0; rep(i,0,n-1) { pos[s[i]].insert(i); ds.add(i, +1); } rep(i,0,n-1) if(pos[s[i]].contains(i)) { assert(*pos[s[i]].begin() == i); pos[s[i]].erase(i); ll j=*pos[-s[i]].begin(); assert(i<j); pos[-s[i]].erase(j); cnt += ds.sum(i+1, j-1); cnt += s[i]>0; ds.add(i, -1); ds.add(j, -1); } rep(i,0,n-1) { pos[s[i]].clear(); } rep(i,0,n+2) { ds.t[i]=0; } return cnt; } #ifdef LOCAL int main() { int n; assert(1 == scanf("%d", &n)); vector<int> S(2 * n); for (int i = 0; i < 2 * n; i++) assert(1 == scanf("%d", &S[i])); fclose(stdin); long long result = count_swaps(S); printf("%lld\n", result); fclose(stdout); return 0; } #endif
#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...