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"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = (int) 1e5 + 5;
int t[4*MAXN];
int lazy[4*MAXN];
void build(int v, int tl, int tr){
if(tl == tr){
t[v] = tl;
}else{
int tm = (tl + tr) / 2;
build(2*v, tl, tm);
build(2*v+1, tm + 1, tr);
}
}
void push(int v){
t[2*v] += lazy[v];
t[2*v + 1] += lazy[v];
lazy[2*v] += lazy[v];
lazy[2*v + 1] += lazy[v];
lazy[v] = 0;
}
void upd(int v, int tl, int tr, int l, int r){
if(l > r) return;
if(tl == l && tr == r){
lazy[v]++;
t[v]++;
}else{
push(v);
int tm = (tl + tr) / 2;
upd(2*v, tl, tm, l, min(tm, r));
upd(2*v+1, tm + 1, tr, max(tm + 1, l), r);
}
}
int que(int v, int tl, int tr, int pos){
if(tl == tr) return t[v];
else{
push(v);
int tm = (tl + tr) / 2;
if(pos <= tm) return que(2*v, tl, tm, pos);
else return que(2*v + 1, tm + 1, tr, pos);
}
}
deque<int> dq[5*MAXN];
long long count_swaps(vector<int> s) {
build(1, 0, s.size() - 1);
ll ans = 0;
for(int idx = 0; idx < s.size(); idx++){
int i = s[idx];
int ot = -i;
if(dq[ot + MAXN].empty()){
dq[i + MAXN].push_back(idx);
}else{
int ooidx = dq[ot + MAXN].front();
dq[ot + MAXN].pop_front();
int oidx = que(1, 0, s.size() - 1, ooidx);
//cerr<<idx<<" "<<oidx<<endl;
if(i < 0){
ans += (idx - oidx);
}else{
ans += (idx - oidx - 1);
}
upd(1, 0, s.size() - 1, ooidx + 1, idx - 1);
}
}
return ans;
}
Compilation message (stderr)
shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:58:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
58 | for(int idx = 0; idx < s.size(); idx++){
| ~~~~^~~~~~~~~~
# | 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... |