Submission #535503

#TimeUsernameProblemLanguageResultExecution timeMemory
535503kebineArranging Shoes (IOI19_shoes)C++17
100 / 100
316 ms277764 KiB
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
const ll MOD=1e9+7;
using namespace std;
ll a[200005],node[800005];
void build(ll now,ll l,ll r){
  if(l==r){
    node[now]=a[l];
    return;
  }
  ll m=(l+r)/2;
  build(now*2,l,m);
  build(now*2+1,m+1,r);
  node[now]=node[now*2]+node[now*2+1];
}
ll query(ll now,ll l,ll r,ll x,ll y){
  if(l>r){
    return 0;
  }
  if(x<=l&&r<=y){
    return node[now];
  }
  if(y<l||x>r){
    return 0;
  }
  ll m=(l+r)/2;
  return query(now*2,l,m,x,y)+query(now*2+1,m+1,r,x,y);
}
void update(ll now,ll l,ll r,ll x,ll val){
  if(r<x||x<l){
    return;
  }
  if(l==r){
    node[now]=val;
    return;
  }
  ll m=(l+r)/2;
  update(now*2,l,m,x,val);
  update(now*2+1,m+1,r,x,val);
  node[now]=node[now*2]+node[now*2+1];
}
queue <ll> qpos[200005];
queue <ll> qneg[200005];
ll count_swaps(vector <int> vec){
  ll N=vec.size();
  ll a[200005];
  for(int i=1;i<=vec.size();i++){
    a[i]=vec[i-1];
  }
  build(1,1,N);
  ll catat=0;
  for(int i=1;i<=N;i++){
    if(a[i]>0){
      if(qneg[a[i]].empty()){
        update(1,1,N,i,1);
        qpos[a[i]].push(i);
      }
      else{
        ll r=i;
        ll l=qneg[a[i]].front();
        qneg[a[i]].pop();
        catat+=(r-l-1);
        catat-=query(1,1,N,l+1,r-1);
        update(1,1,N,l,0);
        update(1,1,N,r,0);
      }
    }
    else{
      a[i]*=-1;
      if(qpos[a[i]].empty()){
        update(1,1,N,i,1);
        qneg[a[i]].push(i);
      }
      else{
        ll r=i;
        ll l=qpos[a[i]].front();
        qpos[a[i]].pop();
        catat+=(r-l);
        catat-=query(1,1,N,l+1,r-1);
        update(1,1,N,l,0);
        update(1,1,N,r,0);
      }
    }
  }
  return catat;
}
//int main(){
//  ll N;
//  cin>>N;
//  vector <int> test;
//  for(int i=1;i<=N;i++){
//    ll temp;
//    cin>>temp;
//    test.push_back(temp);
//  }
//  cout<<count_swaps(test)<<endl;
//}

Compilation message (stderr)

shoes.cpp: In function 'long long int count_swaps(std::vector<int>)':
shoes.cpp:49:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |   for(int i=1;i<=vec.size();i++){
      |               ~^~~~~~~~~~~~
#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...