답안 #1087299

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1087299 2024-09-12T13:12:29 Z anarch_y Tree Rotations (POI11_rot) C++17
0 / 100
491 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) begin(x), end(x)
#define sz(x) (int)x.size()
#define pb push_back

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T> 
using index_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

const int maxn = 400001;
vector<int> adj[maxn];
int A[maxn];
index_set<int> T[maxn];
ll ans = 0LL;

void dfs(int s){
    if(sz(adj[s]) == 0){
        T[s].insert(A[s]);
        return;
    }
    int u1 = adj[s][0], u2 = adj[s][1];
    dfs(u1); dfs(u2);
    if(sz(T[u1]) < sz(T[u2])) swap(u1, u2);
    int m1 = 0, m2 = 0;
    for(auto e: T[u2]){
        int x = T[u1].order_of_key(e);
        m1 += x;
        m2 += sz(T[u1])-x;
    }
    ans += min(m1, m2);
    for(auto e: T[u2]){
        T[u1].insert(e);
    }
    T[u2].clear();
    T[s].swap(T[u1]);
}


int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n; cin >> n;
    int cur = 0;
    vector<int> v;
    while(cur < n){
        int x; cin >> x;
        v.pb(x);
        if(x != 0) cur++;
    }
    stack<int> s;
    for(int i=1; i<=sz(v); i++){
        int x = v[i-1];
        if(!s.empty()){
            adj[s.top()].pb(i);
        }
        s.push(i);
        if(x != 0){
            A[i] = x;
            s.pop();
        }
        if(!s.empty() and sz(adj[s.top()]) == 2) s.pop();
    }
    dfs(1);
    cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 42588 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 42840 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 28 ms 42580 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 20 ms 42840 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 25 ms 43308 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 28 ms 45268 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 133 ms 58568 KB Output isn't correct
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 Incorrect 50 ms 51408 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 306 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 491 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -