Submission #1341656

#TimeUsernameProblemLanguageResultExecution timeMemory
1341656vjudge1Arranging Shoes (IOI19_shoes)C++20
100 / 100
296 ms31172 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int fen[N];
bool d[N];
void add(int x,int v)
{
  x++;
  while(x<N)
  {
    fen[x]+=v;
    x+=(x&-x);
  }
}
int get(int i)
{
  i++;
  int cur=0;
  while(i>0)
  {
    cur+=fen[i];
    i-=(i&-i);
  }
  return cur;
}
long long count_swaps(vector<int> a)
{
  long long ans=0;
  int n=a.size()/2;
  map<int,set<int>> ind;
  for(int i=0;i<2*n;i++)ind[-a[i]].insert(i),add(i,1),d[i]=0;
  for(int i=0;i<2*n;i++)
  {
    if(d[i])continue;
    int j=(*ind[a[i]].begin());
    // cout<<"fu "<<i<<' '<<a[i]<<' '<<j<<' '<<a[j]<<' '<<get(i)<<' '<<get(j)<<endl;
    ans+=get(j)-get(i)-(a[i]<0);
    add(j,-1);
    add(i,-1);
    d[i]=d[j]=1;
    ind[-a[j]].erase(j);
    ind[-a[i]].erase(i);
  }
  return ans;
}
// int main()
// {
//   int n;
//   cin>>n;
//   vector<int> s(2*n);
//   for(int i=0;i<2*n;i++)
//   {
//     cin>>s[i];
//   }
//   cout<<count_swaps(s)<<endl;
// }
#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...