제출 #1307483

#제출 시각아이디문제언어결과실행 시간메모리
1307483hectormedranoArranging Shoes (IOI19_shoes)C++20
45 / 100
233 ms282328 KiB
#include <cstdio> #include <cassert> #include <bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> st(8e5+5, 0); void update(ll l, ll r, ll ind, ll pos){ if(l == r){st[ind]++; return;} ll m = (l+r)/2; if(pos<=m){ update(l, m, 2*ind, pos); } else { update(m+1, r, 2*ind+1, pos); } st[ind] = st[2*ind] + st[2*ind+1]; } ll query(ll l, ll r, ll ind, ll ql, ll qr){ if(r<ql or qr<l){return 0;} if(ql<=l and r<=qr){return st[ind];} ll m = (l+r)/2; return query(l, m, 2*ind, ql, qr) + query(m+1, r, 2*ind+1, ql, qr); } ll count_swaps(vector<int> s) { ll inv = 0; ll n = s.size(); n = n/2; vector<ll> a, p(2*n); vector<queue<ll>> q(4*n+1); for(ll x : s){ if(x<0){ a.push_back(x); a.push_back(-x); } } //for(ll x : a){cout<<x<<" ";} cout<<endl; for(ll i=0;i<2*n;i++){ q[2*n+a[i]].push(i); } for(ll i=0;i<2*n;i++){ //cout<<i<<": "<<q[s[i]+2*n].front()<<endl; p[i] = q[s[i]+2*n].front(); q[s[i]+2*n].pop(); } for(ll i=0;i<2*n;i++){ inv += query(0, 2*n-1, 1, p[i], 2*n-1); update(0, 2*n-1, 1, p[i]); } return inv; }
#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...