제출 #298983

#제출 시각아이디문제언어결과실행 시간메모리
298983TMJNArranging Shoes (IOI19_shoes)C++17
100 / 100
131 ms15736 KiB
#include <bits/stdc++.h> #include "shoes.h" using namespace std; int N,tree[1<<19]; vector<int>vl[100001],vr[100001]; void add(int l,int r){ l+=(1<<18); r+=(1<<18); while(l<r){ if(l&1)tree[l]++; if(~r&1)tree[r]++; l=(l+1)/2; r=(r-1)/2; } if(l==r)tree[l]++; } int calc(int x){ int a=0; x+=(1<<18); while(x){ a+=tree[x]; x/=2; } return a; } long long count_swaps(vector<int>v) { N=v.size(); long long res=0; for(int i=N-1;i>=0;i--){ if(v[i]<0){ vl[-v[i]].push_back(i); } else{ vr[v[i]].push_back(i); } } for(int i=0;i<N;i++){ if(v[i]<0){ if(vl[-v[i]].empty()||vl[-v[i]].back()!=i)continue; vl[-v[i]].pop_back(); res+=vr[-v[i]].back()-i-1; res-=calc(i)-calc(vr[-v[i]].back()); add(i,vr[-v[i]].back()); vr[-v[i]].pop_back(); } else{ if(vr[v[i]].empty()||vr[v[i]].back()!=i)continue; vr[v[i]].pop_back(); res+=vl[v[i]].back()-i; res-=calc(i)-calc(vl[v[i]].back()); add(i,vl[v[i]].back()); vl[v[i]].pop_back(); } } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...