Codeforces Round #763 DIV2 E問題 (2750pt)
Problem description
省略
省略
C++に変換後のコードはこちら
//no-unlocked
int N, K, A[4d5+2], B[];
int mm, aa[], bb[], dup[];
graph g;
HLD hld;
HLD_fenwick<int> f;
char S[], res[]; int ress, arr[], sz, doit[];
void dfs(int n){
if(n==-1) return;
dfs(A[n]); arr[sz++] = n; dfs(B[n]);
}
int getdep(int n){
int k;
return bsearch_min[int,x,0,N+1][
k = hld.up(n,x);
](k==-1 || dup[k]);
}
{
int i, j, k, m;
rd(N,K,S,(A--,B--)(N));
rep(i,N) if(A[i] >= 0) arrInsert(mm, mm, aa, i, bb, A[i]);
rep(i,N) if(B[i] >= 0) arrInsert(mm, mm, aa, i, bb, B[i]);
g.setEdge(N,mm,aa,bb);
hld.init(g);
f.init(&hld);
dfs(0);
rrep(i,N-1){
if(S[arr[i]] < S[arr[i+1]]) doit[i] = 1, continue;
if(S[arr[i]] == S[arr[i+1]]) doit[i] = doit[i+1], continue;
}
rep(i,N) if(!dup[arr[i]]){
if((doit[i] && f.get(0,arr[i])==0)){
k = getdep(arr[i]);
if(k <= K){
K -= k;
j = arr[i];
rep(k){
dup[j] = 1;
j = hld.up(j);
}
}
} else {
f.add(arr[i], 1);
}
}
rep(i,N){
res[ress++] = S[arr[i]];
if(dup[arr[i]]) res[ress++] = S[arr[i]];
}
wt(res);
}
Current time: 2024年05月19日04時45分07秒
Last modified: 2021年12月29日20時58分28秒 (by laycrs)
Tags: Competitive_Programming_Incomplete Codeforces CF763 CF_DIV2_E
トップページに戻る
Logged in as: unknown user (not login)