이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "shoes.h"
#include<iostream>
#include<vector>
using namespace std;
long long st[800001],v[800001];
vector<int>sh[100001],sq[100001];
void bld(int nd,int l,int r){
if(l==r)st[nd]=1,v[l]=1;
else{
int m=(l+r)/2;
bld(nd*2,l,m);
bld(nd*2+1,m+1,r);
st[nd]=st[nd*2]+st[nd*2+1];
}
}
long long val(int nd,int l,int r,int p,int q){
if(r<p||q<l)return 0;
if(p<=l&&r<=q)return st[nd];
int m=(l+r)/2;
return val(nd*2,l,m,p,q)+val(nd*2+1,m+1,r,p,q);
}
void upd(int nd,int l,int r,int p){
if(p<l||r<p)return;
if(l==r)st[nd]=0,v[l]=0;
else{
int m=(l+r)/2;
upd(nd*2,l,m,p);
upd(nd*2+1,m+1,r,p);
st[nd]=st[nd*2]+st[nd*2+1];
}
}
long long count_swaps(vector<int>s){
long long r=0;
bld(1,0,s.size()-1);
for(int i=0;i<s.size();i++){
if(s[i]<0)sq[-s[i]].push_back(i);
else sh[s[i]].push_back(i);
}
for(int i=s.size()-1;0<=i;i--){
if(v[i]){
if(s[i]<0){
r+=val(1,0,s.size()-1,sh[-s[i]].back(),i-1);
upd(1,0,s.size()-1,sh[-s[i]].back());
sh[-s[i]].pop_back();
sq[-s[i]].pop_back();
}else{
r+=val(1,0,s.size()-1,sq[s[i]].back(),i-1)-1;
upd(1,0,s.size()-1,sq[s[i]].back());
sh[s[i]].pop_back();
sq[s[i]].pop_back();
}
}
}
return r;
}
컴파일 시 표준 에러 (stderr) 메시지
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:40:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
40 | for(int i=0;i<s.size();i++){
| ~^~~~~~~~~| # | 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... |