답안 #636267

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
636267 2022-08-28T16:54:24 Z jame0313 Tree Rotations (POI11_rot) C++17
27 / 100
102 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using ld = long double;
using pll = pair<ll, ll>;
// and so on
int arr[1000001];
int in[1000001];
int out[1000001];
vector<vector<int> > mp;
vector<int> lst[2000001];
int id = -1;
int fnd(int idx, int v){
    return upper_bound(lst[idx].begin(),lst[idx].end(),v) - lst[idx].begin();
}
int parse(int x){
    int c;
    cin>>c;
    in[x] = x;
    if(c==0){
        int l = parse(++id);
        int r = parse(++id);
        mp[x].push_back(l);
        mp[x].push_back(r);
    }
    else{
        arr[x] = c;
    }
    out[x] = id;
    return in[x];
}
ll sol(int x) {
    ll ret = 0;
    if (arr[x] == 0) {
        int a = mp[x][0];
        int b = mp[x][1];
        ret += sol(a) + sol(b);
        if(out[a] - in[a] < out[b] - in[b]) swap(a, b);
        ll acnt = 0, bcnt = 0;
        int zero_cnt = fnd(a, 0);
        int siz = lst[a].size();
        for(int i=in[b];i<=out[b];i++){
            if(!arr[i]) continue;
            int cnt = fnd(a,arr[i]) - zero_cnt;
            acnt += cnt;
            bcnt += siz - cnt;
        }
        ret += min(acnt, bcnt);
        lst[x] = lst[a];
        lst[x].insert(lst[x].end(),lst[b].begin(),lst[b].end());
        sort(lst[x].begin(),lst[x].end());
        return ret;

    } else {
        lst[x] = {arr[x]};
        return 0;
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int N;
    cin >> N;
    mp.resize(2*N+1);
    int r = parse(++id);
    cout<<sol(r);
    
}
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 47188 KB Output is correct
2 Correct 23 ms 47224 KB Output is correct
3 Correct 23 ms 47304 KB Output is correct
4 Correct 23 ms 47236 KB Output is correct
5 Correct 23 ms 47308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 47256 KB Output is correct
2 Correct 26 ms 47356 KB Output is correct
3 Correct 24 ms 47268 KB Output is correct
4 Correct 24 ms 47392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 47536 KB Output is correct
2 Correct 25 ms 47572 KB Output is correct
3 Correct 24 ms 47364 KB Output is correct
4 Correct 28 ms 48800 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 99 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 86 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 102 ms 64464 KB Output is correct
2 Runtime error 55 ms 65536 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 61 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 72 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 60 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 64 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 64 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -