제출 #1364693

#제출 시각아이디문제언어결과실행 시간메모리
1364693nataliaaArranging Shoes (IOI19_shoes)C++20
0 / 100
132 ms269736 KiB
#include<bits/stdc++.h>
#include "shoes.h"
using namespace std;
const int MAXN = 200005;

long long ok[MAXN] = {};
void upd(int idx, int val){
    while(idx<=MAXN){
        ok[idx]+=val;
        idx+=idx&(-idx);
    }
}

long long get(int idx){
    long long s= 0;
    while(idx>0){
        s+=ok[idx];
        idx-=idx&(-idx);
    }
    return s;
}
long long count_swaps(vector<int> v) {
    long long ans = 0;
    queue<int> p[MAXN][2]={};
    for(int i = 0; i < v.size(); i++){
        if(v[i]<0) p[-v[i]][0].push(i);
        else{ p[v[i]][1].push(i);}
    }
    for(long long i = 0; i < v.size(); i+=2){
        if(v[i]<0){
            long long j = p[-v[i]][1].front();
            // cout << j << endl;
            long long k1 =i+ get(i+1), k2 =j+ get(j+1);
            // cout << k1 <<" "<< k2 << endl;
            ans+=k2-k1+1;
            p[-v[i]][1].pop();
            upd(k1+1, 1);
            upd(k2+2, -1);
            continue;
        }
        long long j = p[v[i]][0].front();
        long long k1 =i+ get(i+1), k2 =j+ get(j+1);
        ans+=k2-k1+1;
        // cout << "1.   " << j<< endl;
        // cout << k1 <<" "<< k2 << endl;
        p[v[i]][0].pop();
        upd(k1+1, 1);
        upd(k2+2, -1);
    }
    return ans;
}
// int main() {
// 	int n;
// 	assert(1 == scanf("%d", &n));
// 	vector<int> S(2 * n);
// 	for (int i = 0; i < 2 * n; i++)
// 		assert(1 == scanf("%d", &S[i]));
// 	fclose(stdin);

// 	long long result = count_swaps(S);

// 	printf("%lld\n", result);
// 	fclose(stdout);
// 	return 0;
// }
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…