| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1334577 | yc11 | Arranging Shoes (IOI19_shoes) | C++20 | 76 ms | 27676 KiB |
#include<bits/stdc++.h>
using namespace std;
int64_t count_swaps(vector<int> S){
struct node{
int s,e,m;
int64_t val;
node *l, *r;
node(int _s,int _e):
s(_s),e(_e),m((_s+_e)/2),val(0){
if (s!=e){
l = new node(s,m);
r = new node(m+1,e);
}
}
void update(int p, int v){
if (s==e) {val+=v;return;}
if (p>m) r->update(p,v);
else l->update(p,v);
val = l->val+r->val;
}
int64_t query(int a, int b){
if (b<s or a>e) return 0;
if (a<=s and b>=e) return val;
return l->query(a,b)+r->query(a,b);
}
};
node *root = new node(0,S.size()-1);
for (int i = 0;i<S.size();i++) root->update(i,1);
vector<vector<int64_t> >l;
vector<vector<int64_t> >r;
l.resize(S.size()/2+1);
r.resize(S.size()/2+1);
int64_t ans = 0;
for (int i = 0;i<S.size();i++){
if (S[i]<0) {
l[S[i]*-1].push_back(i);
}
else{
r[S[i]].push_back(i);
}
}
for (int i = 1;i<=S.size()/2;i++){
for (int j = 0;j<l[i].size();j++){
if (l[i][j]>r[i][j]){
ans = ans+root->query(r[i][j],l[i][j]-1);
root->update(l[i][j],-1);
root->update(r[i][j],1);
}
else{
ans = ans+root->query(l[i][j]+1,r[i][j]-1);
root->update(l[i][j],1);
root->update(r[i][j],-1);
}
}
}
return ans;
}| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
