제출 #1290767

#제출 시각아이디문제언어결과실행 시간메모리
1290767julia_08Arranging Shoes (IOI19_shoes)C++20
15 / 100
15 ms1972 KiB
#include <bits/stdc++.h> #include "shoes.h" using ll = long long; using namespace std; const int MAXN = 2e5 + 10; int bit[MAXN]; vector<int> pos[MAXN][2]; int n; void bit_add(int pos, int x){ for(int i=pos; i<=(2 * n); i+=(i&-i)){ bit[i] += x; } } int bit_query(int pos){ int sum = 0; for(int i=pos; i>0; i-=(i&-i)){ sum += bit[i]; } return sum; } ll solve(int a){ if(pos[a][0].empty()) return 0; ll ans = 0; // cout << pos[a][0].size() << " " << pos[a][1].size() << endl; int l = 0, r = 0; // vector<pair<int, int>> upd; while(l < (int) pos[a][0].size()){ int pos_left = pos[a][0][l], pos_right = pos[a][1][r]; // cout << "pos " << pos_left << ' ' << pos_right << endl; if(pos_left > pos_right){ swap(pos_left, pos_right); ans ++; } ans += pos_right - pos_left - 1 + (bit_query(pos_right) - bit_query(pos_left)); bit_add(pos_left, 1); bit_add(pos_right, -1); // upd.push_back({pos_left, -1}); // upd.push_back({pos_right, 1}); l ++; r ++; } // for(auto [pos, x] : upd) bit_add(pos, x); return ans; } ll count_swaps(vector<int> s){ n = (int) s.size() / 2; /* for(int i=0; i<(2 * n); i++){ if(s[i] < 0){ pos[-s[i]][0].push_back(i + 1); } else pos[s[i]][1].push_back(i + 1); } ll ans = 0; for(int i=1; i<=n; i++) ans += solve(i); */ ll ans = 0; for(int i=n; i<(2 * n); i++){ ans += (n - 1 - (i - n)); } 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...