Educational Codeforces Round 152
题目地址
A
数学,读题即可。
B
很有意思。
先对%k=0的特判。
剩下的按照%k的大小排序即可。
C
考虑两个区间相同的条件。
先考虑将区间缩小即左侧为0右侧为1就可以进行缩小。
两个区间相同当且仅当缩小后是一样的。放set里去重即可。
D
考虑缩点就是将每一段每个数字>=1的缩在一起
因为这一段可以通过点其中一个达到将所有数字都点起来的条件。
如果全是1能从左边点到右边或者从右边点到左边。
如果存在一个2就从2开始点达到两边都点。
缩点完后可以发现仍然是一个012的序列不过任意12不相邻。
从前往后贪心即可。
E
对于一个排列求有多少个区间满足最大值下标大于最小值下标。
这里考虑枚举最大值下标和其管理区间\([L,R]\) 考虑统计越过最大值的区间数目。
对于最大值左侧的数字考虑其向右能延伸的最远(都比当前数字小)的区间端点\(R[i]\)
同时再令\(R[i]=min(R[i],R[i+1])\)
那么答案的结果就是求\(\sum min(R[i],R)-L+1\)
那么每次仅是维护一个不增的序列并对这个序列的一部分取min求和。
用线段树显然可以。但直接二分维护这个序列也可(细节更多)。
直接上线段树了。复杂度nlog。
F
给一个集合让分成两个集合每个集合有两个数字异或最小让最小的最大。
先考虑这个集合中最小两个元素,这两个元素一定会分开。
在考虑之后异或最小的元素这两个元素也让其分开。
如果存在两个元素之后是最小的之前也出现过这两个元素也应该分开。
在该分开的元素之间连边形成一颗树为异或最小生成树。
黑白染色即得到方案。
异或最小生成树用trie树来做。复杂度nlog log。