This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shoes.h"
int n,ans,r,pos;
vector<int>locl[500001],locr[500001],indl[500001],indr[500001];
int tree[500001];
void upd(int node,int tl,int tr){
if(tl==tr){
tree[node] = 1;
return;
}
int mid = (tl+tr)/2;
if(pos<mid)
upd(node*2,tl,mid);
else
upd(node*2+1,mid+1,tr);
tree[node] = tree[node*2] + tree[node*2+1];
}
int get(int node,int tl,int tr){
if(r<tl)return 0;
if(tr<=tr)return tree[node];
int mid = (tr+tl)/2;
int x = get(node*2,tl,mid);
int y = get(node*2+1,mid+1,tr);
return x+y;
}
long long count_swaps(std::vector<int> s) {
n = s.size()/2;
for(int i=0;i<s.size();i++){
if(s[i]<0){
locl[-s[i]] = i;
} else {
locr[s[i]] = i;
}
}
for(int i=0;i<s.size();i++){
if(s[i]<0){
int loc = locr[ s[i] ][ indr[ s[i] ] ];
r = loc;
ans += loc - i - get(1,0,s.size()-1);
indr[ s[i] ] ++;
pos = loc;
upd(1,0,s.size()-1);
} else {
int loc = locl[ s[i] ][ indl[ s[i] ] ];
r = loc;
ans += loc - i + 1 - get(1,0,s.size()-1);
indl[ s[i] ] ++;
pos = loc;
upd(1,0,s.size()-1);
}
}
return ans;
}
Compilation message (stderr)
shoes.cpp:5:1: error: 'vector' does not name a type
vector<int>locl[500001],locr[500001],indl[500001],indr[500001];
^~~~~~
shoes.cpp: In function 'int get(int, int, int)':
shoes.cpp:30:7: warning: self-comparison always evaluates to true [-Wtautological-compare]
if(tr<=tr)return tree[node];
~~^~~~
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:44:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<s.size();i++){
~^~~~~~~~~
shoes.cpp:46:4: error: 'locl' was not declared in this scope
locl[-s[i]] = i;
^~~~
shoes.cpp:46:4: note: suggested alternative: 'bool'
locl[-s[i]] = i;
^~~~
bool
shoes.cpp:48:4: error: 'locr' was not declared in this scope
locr[s[i]] = i;
^~~~
shoes.cpp:48:4: note: suggested alternative: 'long'
locr[s[i]] = i;
^~~~
long
shoes.cpp:52:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<s.size();i++){
~^~~~~~~~~
shoes.cpp:54:14: error: 'locr' was not declared in this scope
int loc = locr[ s[i] ][ indr[ s[i] ] ];
^~~~
shoes.cpp:54:14: note: suggested alternative: 'loc'
int loc = locr[ s[i] ][ indr[ s[i] ] ];
^~~~
loc
shoes.cpp:54:28: error: 'indr' was not declared in this scope
int loc = locr[ s[i] ][ indr[ s[i] ] ];
^~~~
shoes.cpp:54:28: note: suggested alternative: 'int'
int loc = locr[ s[i] ][ indr[ s[i] ] ];
^~~~
int
shoes.cpp:62:14: error: 'locl' was not declared in this scope
int loc = locl[ s[i] ][ indl[ s[i] ] ];
^~~~
shoes.cpp:62:14: note: suggested alternative: 'loc'
int loc = locl[ s[i] ][ indl[ s[i] ] ];
^~~~
loc
shoes.cpp:62:28: error: 'indl' was not declared in this scope
int loc = locl[ s[i] ][ indl[ s[i] ] ];
^~~~
shoes.cpp:62:28: note: suggested alternative: 'int'
int loc = locl[ s[i] ][ indl[ s[i] ] ];
^~~~
int