Submission #232080

#TimeUsernameProblemLanguageResultExecution timeMemory
232080DanerZeinArranging Shoes (IOI19_shoes)C++14
0 / 100
6 ms2720 KiB
#include "shoes.h"
#include <bits/stdc++.h>
#define MAX 100010
using namespace std;
typedef long long ll;
typedef pair<ll,ll>ii;
typedef vector<ii>vi;
ll tree[800010],v[200010];

void init(int node,int a,int b){
  if(a==b){
    tree[node]=1;
    return;
  }
  init(2*node+1,a,(a+b)/2);
  init(2*node+2,((a+b)/2)+1,b);
  tree[node]=tree[2*node+1]+tree[2*node+2];
}
void update(int node,int a,int b,int pos,int val){
  if(a>pos or b<pos) return;
  if(a==b and b==pos){tree[node]=val; return;}
  update(2*node+1,a,(a+b)/2,pos,val);
  update(2*node+2,b,(a+b)/2+1,pos,val);
  tree[node]=tree[2*node+1]+tree[2*node+2];
}
int query(int node,int a,int b, int l,int r){
  // cout<<node<<" "<<a<<" "<<b<<" "<<l<<" "<<r<<endl;
  //return 0;
  if(b<l or a>r) return 0;
  if(l<=a and b<=r) return tree[node];
  return query(2*node+1,a,(a+b)/2,l,r)+query(2*node+2,((a+b)/2)+1,b,l,r);
}
long long count_swaps(std::vector<int> s) {
  vector<vi> sz;
  int n=s.size()/2;
  sz.resize(MAX);
  for(int i=0;i<s.size();i++){
    sz[abs(s[i])].push_back(ii(s[i],i));
  }
  // cout<<sz.size()<<endl;
  ll res=0;
  vector<ii>sa;
  for(int i=1;i<=s.size();i++){
    sort(sz[i].begin(),sz[i].end());
    for(int j=0;j<sz[i].size()/2;j++){
      ll l=sz[i][j].second;
      ll r=sz[i][j+sz[i].size()/2].second;
      if(l>r){
	swap(l,r);
	res++;
      }
      sa.push_back(ii(l,r));
    }
  }
  // cout<<"hi"<<endl;
  init(0,0,s.size()-1);
  //cout<<"hi"<<endl;
  /* for(int i=0;i<10;i++){
    cout<<tree[i]<<" ";
  }
  cout<<endl;
  cout<<res<<endl;*/
  for(int i=0;i<sa.size();i++){
    //  cout<<sa[i].second<<" "<<sa[i].first<<endl;
    int x,y;
    x=query(0,0,s.size()-1,0,sa[i].second);
    y=query(0,0,s.size()-1,0,sa[i].first);
    //cout<<x<<" "<<y<<endl;
    res+=(x-y);
    //   cout<<"hi"<<endl;
    update(0,0,s.size()-1,sa[i].first,-1);
    update(0,0,s.size()-1,sa[i].second,-1);
  }
  return res;
}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:37:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<s.size();i++){
               ~^~~~~~~~~
shoes.cpp:43:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=1;i<=s.size();i++){
               ~^~~~~~~~~~
shoes.cpp:45:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=0;j<sz[i].size()/2;j++){
                 ~^~~~~~~~~~~~~~~
shoes.cpp:63:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<sa.size();i++){
               ~^~~~~~~~~~
shoes.cpp:35:7: warning: unused variable 'n' [-Wunused-variable]
   int n=s.size()/2;
       ^
#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...