이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;
#define all(x) x.begin(),x.end()
#define ff first
#define ss second
#define pb push_back
const int N=2e5+5;
long long t[N*4];
void build(int v,int tl,int tr){
if(tl==tr)t[v]=1;
else{
int tm=(tl+tr)/2;
build(v*2,tl,tm);
build(v*2+1,tm+1,tr);
t[v]=t[v*2]+t[v*2+1];
}
}
void update(int v,int tl,int tr,int pos){
if(tl==tr)t[v]=0;
else{
int tm=(tl+tr)/2;
if(pos<=tm)update(v*2,tl,tm,pos);
else update(v*2+1,tm+1,tr,pos);
t[v]=t[v*2]+t[v*2+1];
}
}
long long get(int v,int tl,int tr,int l,int r){
if(r<tl or tr<l)return 0;
if(l<=tl && tr<=r)return t[v];
int tm=(tl+tr)/2;
return get(v*2,tl,tm,l,r)+get(v*2+1,tm+1,tr,l,r);
}
long long count_swaps(vector<int> s) {
int n=s.size();
s.insert(s.begin(),0);
build(1,1,n);
vector <pair <int,int> > v[n+1];
for(int i=1;i<=n;i++){
if(s[i]>0)v[s[i]].pb({i,1});
if(s[i]<0)v[-s[i]].pb({i,0});
}
vector <int> done(n+1);
long long ans=0;
for(auto val : s){
int i=abs(val);
if(done[i])continue;
if(v[i].size()==0)continue;
for(int j=0;j<v[i].size();j++){
update(1,1,n,v[i][j].ff);
}
vector <int> x,y;
int p=v[i][0].ff;
for(int j=1;j<v[i].size();j++){
ans+=get(1,1,n,p,v[i][j].ff);
}
for(int j=0;j<v[i].size();j++){
if(j%2==0 && v[i][j].ss==1)x.pb(j);
if(j%2==1 && v[i][j].ss==0)y.pb(j);
}
for(int j=0;j<x.size();j++){
ans+=abs(x[j]-y[j]);
}
done[i]=1;
}
return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:51:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
51 | for(int j=0;j<v[i].size();j++){
| ~^~~~~~~~~~~~
shoes.cpp:57:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
57 | for(int j=1;j<v[i].size();j++){
| ~^~~~~~~~~~~~
shoes.cpp:60:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
60 | for(int j=0;j<v[i].size();j++){
| ~^~~~~~~~~~~~
shoes.cpp:65:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
65 | for(int j=0;j<x.size();j++){
| ~^~~~~~~~~
# | 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... |