제출 #1351313

#제출 시각아이디문제언어결과실행 시간메모리
1351313okahak719월 (APIO24_september)C++20
100 / 100
228 ms24672 KiB
#include "september.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(X) X.begin(), X.end()
#define allr(X) X.rbegin(), X.rend()
using namespace std;

struct sgt{
	vector<ll>st, lz;
	sgt(ll n){st.assign(4 * n + 5, 0); lz.assign(4 * n + 5, 0);}
	void lazy(ll l, ll r, ll v){
		if(!lz[v]) return ;
		st[v] = r - l + 1;
		if(l != r){
			lz[v << 1 | 1]= 
			lz[v << 1] = 1;
		}
		lz[v] = 0;
	}
	ll get(ll l, ll r, ll ql, ll qr, ll v){
		lazy(l, r, v);
		if(qr < l or ql > r) return 0;
		if(ql <= l and r <= qr) return st[v];
		ll mid = (l + r) / 2;
		return get(l, mid, ql, qr, v << 1) + get(mid + 1, r, ql, qr, v << 1|1);
	}
	void upd(ll l, ll r, ll ql, ll qr, ll v){
		lazy(l, r, v);
		if(qr < l or ql > r) return ;
		if(ql <= l and r <= qr){
			lz[v] = 1;
			lazy(l, r, v);
			return ;
		}
		ll mid = (l + r) / 2;
		upd(l, mid, ql, qr, v << 1);
		upd(mid + 1, r, ql, qr, v << 1 | 1);
		st[v] = st[v << 1] + st[v << 1 | 1];
	}
};

ll timer = 0;
vector<vector<ll>>g;
vector<ll>tin, tout;

void dfs(ll u, ll p = -1){
	tin[u] = ++timer;
	for(ll &v : g[u]){
		if(v == p) continue;
		dfs(v, u);
	}
	tout[u] = timer;
}

int solve(int n, int m, vector<int> f, vector<vector<int>> s) {
	sgt sg(n);
	timer = 0;
	g.assign(n, {});
	tin.assign(n, -1);
	tout.assign(n, -1);
	for(ll i = 1; i < n; i++)
		g[f[i]].pb(i),
		g[i].pb(f[i]);
	dfs(0);
	vector<ll>cnt(n, 0), ccnt(n + 1, 0);
	ll k = 0;
	for(ll i = 0; i < n - 1; i++){
		for(ll j = 0; j < m; j++){
			ccnt[cnt[s[j][i]]++]--;
			ccnt[cnt[s[j][i]]]++;
			sg.upd(0, n, tin[s[j][i]], tout[s[j][i]], 1);
		}
		bool bl1 = (ccnt[m] == i + 1);
		bool bl2 = (sg.get(0, n, 0, n, 1) == i + 1);
		k += (bl1 & bl2);
	}
	return k;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...