0%

思路讲解

赛时差一点想到AC,主要是needVal为负数的情况没有想到(减着减着变负数了)

其实只改一个数就行,其他数全部赋为-INF。

AC代码

https://codeforces.com/contest/2107/submission/318579760

心路历程(WA,TLE,MLE……)

思路讲解

1
2
3
4
// 要求你构造一个数组,符合A中的要求,如果A[1]=1,那么就说明这个
// 构造数组中的这个元素需要于第一次操作时去除。A[2]=-1,说明第二个元素被剩下了。
// 奇数次操作只留下局部最小值,偶数次操作只留下局部最大值(严格)。

AC代码

https://codeforces.com/contest/2103/submission/318747498

心路历程(WA,TLE,MLE……)

思路讲解

首先,注意到,这道题目我们是不在意这个段的中位数到底是几的,我们只在意这个段的中位数是 >K>K还是 K≤K 。因此我们只需要通过记录 K≤K 的数的数量,就可以知道符不符合要求。

那么前缀和后缀可以用这种方法比较简便的求得,那么中间的怎么办呢?

以前缀为例,在处理的时候,直接判断该位置和最近的前缀合法位置能不能组合为两个合法段。(贪心地,我们认为总是和最近的段组合为两个合法段)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vector<ll> pres;
FOR(i,1,N){
preA[i]=preA[i-1];
if(A[i]<=K){
++preA[i];
}
if(!pres.empty()){
// 将这个点和之前合法的前缀组合一下,看看呢能不能凑出两个合法段
ll len=i-pres.back();
ll num=preA[i]-preA[pres.back()];
if(num>=ceil(len/2.0)){
cout<<"YES\n";
return;
}
}
if(preA[i]>=ceil(i/2.0l)){
pres.pb(i);
}
}

AC代码

https://codeforces.com/contest/2103/submission/318394685

心路历程(WA,TLE,MLE……)

思路讲解

jiangly的代码利用了状压dp的思想,我汲取一下思想,来写一波

AC代码

https://atcoder.jp/contests/abc404/submissions/65496213

心路历程(WA,TLE,MLE……)

思路讲解

只要大家入度都为2就行了。

但是注意,上面这句话成立的条件是在联通图下。

AC代码

https://atcoder.jp/contests/abc404/submissions/65464102

心路历程(WA,TLE,MLE……)