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<bits/stdc++.h>
using namespace std;
#include "shoes.h"
#define F first
#define S second
#define MID ((l+r)/2)
long long seg[700000];
long long n;
void build(long long l=0, long long r=n, long long ind=1){
if(l==r) seg[ind] = 1;
else{
build(l, MID, ind*2);
build(MID+1, r, ind*2+1);
seg[ind] = seg[ind*2] + seg[ind*2+1];
}
}
void update(long long p, long long l=0, long long r=n, long long ind=1){
if(l==r && l==p) seg[ind] = 0;
else if(r<p || l>p || l==r) return;
else{
update(p, l, MID, ind*2);
update(p, MID+1, r, ind*2+1);
seg[ind] = seg[ind*2] + seg[ind*2+1];
}
}
long long query(long long rl, long long rr, long long l=0, long long r=n, long long ind=1){
if(rl<=l && r<=rr) return seg[ind];
else if(r<rl || l>rr) return 0;
else return query(rl, rr, l, MID, ind*2) + query(rl, rr, MID+1, r, ind*2+1);
}
long long count_swaps(std::vector<int> s) {
n = s.size();
build();
long long swaps=0;
long long ind = 0;
unordered_map<long long, queue<long long> > m;
for(long long i=0;i<s.size();i++){
m[s[i]].push(i);
}
while(ind<s.size()){
if(m[s[ind]].size()==0 || m[s[ind]].front() !=ind){
ind++;
continue;
}
if(s[ind]>0) swaps++;
long long i = m[-s[ind]].front();
swaps += query(ind+1, i-1);
//swaps += (i-ind-1);
update(m[s[i]].front());
//cout<<query(ind, i)<<endl;
m[-s[ind]].pop();
m[s[ind]].pop();
ind++;
//cout<<endl<<endl<<endl;
}
return swaps;
}
Compilation message (stderr)
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:41:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(long long i=0;i<s.size();i++){
~^~~~~~~~~
shoes.cpp:44:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(ind<s.size()){
~~~^~~~~~~~~| # | 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... |