제출 #717324

#제출 시각아이디문제언어결과실행 시간메모리
717324DaktoArranging Shoes (IOI19_shoes)C++17
0 / 100
1084 ms212 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; struct segtree{ vector<int> val; vector<int> left, right; int n; segtree(int _n){ n=1; while(n<_n) n*=2; val.resize(n); left.resize(n); right.resize(n); for(int i=0; i<n; i++){ left[n+i]=right[n+i]=i; } for(int i=n-1; i>0; i--){ left[i]=left[2*i]; right[i]=right[2*i+1]; } } void set(int ind, int vl){ ind+=n; val[ind]=vl; ind/=2; while(ind>0){ val[ind]=val[ind*2]+val[ind*2+1]; } } int query(int l, int r, int x=1){ if(l>r) return 0; if(l>right[x] || r<left[x]) return 0; if(l<=left[x] && right[x]<=r) return val[x]; return query(l,r,2*x)+query(l,r,2*x+1); } }; long long count_swaps(std::vector<int> s) { map<int,queue<int>> m; vector<int> arr; int ctr=0; for(auto i:s){ if(m[i].size()>0){ arr.push_back(m[i].front()); m[i].pop(); } else{ arr.push_back(2*ctr+i<0); m[-i].push(2*ctr+(-i<0)); } } segtree tree(s.size()); long long res=0; for(auto i:arr){ tree.set(i, 1); res+=tree.query(0, i-1); } 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...