제출 #729518

#제출 시각아이디문제언어결과실행 시간메모리
729518vjudge1Arranging Shoes (IOI19_shoes)C++17
50 / 100
138 ms35092 KiB
#include "shoes.h"
#include<bits/stdc++.h>
#define INF 1e9+7
#define ll long long
#define ull unsigned ll
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pcc pair<char,char>
#define pdd pair<long double,long double>
#define pipii pair<int,pii>
#define plpll pair<ll,pll>
#define vi vector<int>
#define vvi vector<vi>
#define v3i vector<vvi>
#define v4i vector<v3i>
#define fi first
#define se second
#define mp make_pair
#define eb emplace_back
#define ins insert
#define ln '\n'
#define all(v) v.begin(),v.end()

using namespace std;

const int up=1e5+5;
int tree[4*up];

void update(int node,int l,int r,int pos,int val){
    if(l==r){
        tree[node]=val;
    }
    else{
        int mid=(l+r)>>1;
        if(pos<=mid){
            update(node<<1,l,mid,pos,val);
        }
        else{
            update((node<<1)+1,mid+1,r,pos,val);
        }
        tree[node]=tree[node<<1]+tree[(node<<1)+1];
    }
}

int query(int node,int l,int r,int ql,int qr){
    if(ql>r or l>qr) return 0;
    if(ql<=l&&r<=qr) return tree[node];
    int mid=(l+r)>>1;
    return query(node<<1,l,mid,ql,qr)+query((node<<1)+1,mid+1,r,ql,qr);
}

ll count_swaps(vi s){
    ll res=0;
    int n=s.size();
    map<int,set<int>>v;
    for(int i=0;i<n;++i){
        v[s[i]].ins(i);
        update(1,1,n,i+1,1);
    }
    int color[n];
    memset(color,0,sizeof(color));
    for(int i=0;i<n;++i){
        if(color[i]) continue;
        int k=-s[i];
        int t=*v[k].lower_bound(i);
        color[t]=1;
        res+=query(1,1,n,i+1,t+1)-1;
       // cout<<query(1,1,n,i+1,t+1)<<ln;
        if(s[i]<0) res--;
        //cout<<res<<ln;
        v[k].erase(t);
        update(1,1,n,t+1,0);
    }
	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...