답안 #1020718

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1020718 2024-07-12T08:48:39 Z cnn008 Tree Rotations (POI11_rot) C++17
100 / 100
183 ms 28496 KB
#include "bits/stdc++.h"
using namespace std;
 
#ifdef N_N_C
#include "debug.h"
#else
#define cebug(...) "Arya"
#endif
 
#define ll long long
 
const int N=4e5+5;
const int mod=1e9+7;
 
int n,node=1,a[N],sz[N],leaf[N];
ll ans,cur;
vector <int> g[N];
struct BIT{
	#define gb(x) (x&(-x))
   	int n;
   	vector <int> bit;
   	void init(int _n){
   		bit.resize(_n,0);
   		n=_n;
   	}
   	void update(int pos, int val){
   		int i=pos;
      	for (; i<n; i+=gb(i)) bit[i]+=val;
   	}
   	int get(int pos){
    	int ans=0,i=pos;
      	for (; i>=1; i-=gb(i)) ans+=bit[i];
      	return ans;
   	}
}fw;
void input(){
	int x;
	cin>>x;
	a[node]=x;
	if(x) return;
	int nw=node;
	g[nw].push_back(++node);
	input();
	g[nw].push_back(++node);
	input();
}
void pre_dfs(int u){
	if(a[u]) leaf[u]=1;
	sz[u]=1;
	for(auto v:g[u]){
		pre_dfs(v);
		sz[u]+=sz[v];
		leaf[u]+=leaf[v];
	}
}
void add(int u){
	if(a[u]) cur+=fw.get(a[u]-1);
	for(auto v:g[u]) add(v);
}
void del(int u){
	if(a[u]) fw.update(a[u],-1);
	for(auto v:g[u]) del(v);
}
void upd(int u){
	if(a[u]) fw.update(a[u],1);
	for(auto v:g[u]) upd(v);
}
void dfs(int u){
	if(a[u]){
		fw.update(a[u],1);
		return;
	}
	int big=0,small=0;
	for(auto v:g[u]) if(sz[v]>sz[big]) big=v;
	for(auto v:g[u]){
		if(v!=big){
			dfs(v);
			del(v);
		}
	}
	assert(big);
	dfs(big);
	cur=0;
	for(auto v:g[u]) if(v!=big) add(v),upd(v),small=v;
	ans+=min(1ll*cur,1ll*leaf[big]*leaf[small]-cur);
}
void sol(){
	fw.init(N);
	cin>>n;
	input();
	pre_dfs(1);
	dfs(1);
	cout<<ans;
}
signed main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    // freopen(".inp", "r", stdin);
    // freopen(".out", "w", stdout);
    int tt=1;
    //cin>>tt; 
    while(tt--){
    	sol();
    }
    cerr << "\nTime elapsed: " << 1000.0 * clock() / CLOCKS_PER_SEC << " ms.\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14428 KB Output is correct
2 Correct 2 ms 14428 KB Output is correct
3 Correct 3 ms 14428 KB Output is correct
4 Correct 3 ms 14424 KB Output is correct
5 Correct 3 ms 14428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14424 KB Output is correct
2 Correct 4 ms 14504 KB Output is correct
3 Correct 3 ms 14428 KB Output is correct
4 Correct 2 ms 14428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 14428 KB Output is correct
2 Correct 3 ms 14428 KB Output is correct
3 Correct 3 ms 14424 KB Output is correct
4 Correct 4 ms 14428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 14684 KB Output is correct
2 Correct 5 ms 14684 KB Output is correct
3 Correct 5 ms 14692 KB Output is correct
4 Correct 5 ms 14680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 15452 KB Output is correct
2 Correct 11 ms 15020 KB Output is correct
3 Correct 28 ms 15708 KB Output is correct
4 Correct 11 ms 15448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 16476 KB Output is correct
2 Correct 24 ms 17500 KB Output is correct
3 Correct 32 ms 18716 KB Output is correct
4 Correct 27 ms 18496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 22620 KB Output is correct
2 Correct 35 ms 20436 KB Output is correct
3 Correct 44 ms 19036 KB Output is correct
4 Correct 41 ms 18268 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 47 ms 19292 KB Output is correct
2 Correct 44 ms 20308 KB Output is correct
3 Correct 48 ms 22872 KB Output is correct
4 Correct 46 ms 22620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 132 ms 23812 KB Output is correct
2 Correct 113 ms 22612 KB Output is correct
3 Correct 75 ms 22832 KB Output is correct
4 Correct 93 ms 22376 KB Output is correct
5 Correct 149 ms 21160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 23056 KB Output is correct
2 Correct 85 ms 27472 KB Output is correct
3 Correct 96 ms 25680 KB Output is correct
4 Correct 74 ms 28356 KB Output is correct
5 Correct 183 ms 22100 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 95 ms 22900 KB Output is correct
2 Correct 74 ms 23892 KB Output is correct
3 Correct 136 ms 22352 KB Output is correct
4 Correct 103 ms 23120 KB Output is correct
5 Correct 65 ms 28496 KB Output is correct
6 Correct 169 ms 22356 KB Output is correct