제출 #255945

#제출 시각아이디문제언어결과실행 시간메모리
255945b00n0rpArranging Shoes (IOI19_shoes)C++17
50 / 100
1092 ms19452 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 cnt[200005]; 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++; REP(j,last[n-a[i]]){ ans -= cnt[j]; } cnt[last[n-a[i]]]++; cnt[i]--; 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...