Submission #1181384

#TimeUsernameProblemLanguageResultExecution timeMemory
1181384petezaArranging Shoes (IOI19_shoes)C++20
100 / 100
44 ms13896 KiB
#include "shoes.h" #include <bits/stdc++.h> using namespace std; vector<int> poses[100005][2]; int fwk[200005]; bool vis[200005]; void upd(int idx, int val) { //cout << idx << ' '; for(;idx <= 200000; idx+=idx&-idx) fwk[idx] += val; } int qr(int idx) { int sum = 0; for(;idx;idx-=idx&-idx) sum += fwk[idx]; return sum; } int gcidx(int idx) { return idx - qr(idx); } long long count_swaps(std::vector<int> s) { long long res = 0; for(int i=s.size()-1;i>=0;i--) { if(s[i] < 0) poses[-s[i]][0].push_back(i); else poses[s[i]][1].push_back(i); } for(int i=0;i<s.size();i++) { if(vis[i]) continue; int bruhbruh = max(s[i], -s[i]); if(s[i] < 0) { int cl = gcidx(i+1), cr = gcidx(poses[-s[i]][1].back() + 1); res += (cr - cl - 1); upd(i+1, 1); upd(poses[-s[i]][1].back() + 1, 1); } else { int cl = gcidx(i+1), cr = gcidx(poses[s[i]][0].back() + 1); res += (cr - cl); upd(i+1, 1); upd(poses[s[i]][0].back() + 1, 1); } vis[poses[bruhbruh][0].back()] = 1; vis[poses[bruhbruh][1].back()] = 1; poses[bruhbruh][0].pop_back(); poses[bruhbruh][1].pop_back(); } return res; }
#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...