Nearest Minimums
相同的数里最小的数里的最小距离
Two Cakes
Three Garlands
瞎比试
Inversion Counting
先算出来最初逆序对个数,对于每次选择,如果选出的区间里数对个数为偶数个,则其中正序对和逆序对个数可能分别为(奇数+奇数)或(偶数+偶数),此时总的逆序对奇偶性不变;如果选出的区间里数对个数为奇数个,则其中正序对和逆序对个数可能分别为(奇数+偶数)或(偶数+奇数),此时总的逆序对奇偶性改变。
Stack Sorting
显然,一个排列可以栈排序的条件是对于任意i<j<k,(a[j]>a[i] && a[i]>a[k])的值为假。
只需保证在剩下n-k个数的插入过程中,不会产生新的导致无法栈排序的情况,然后对得到的序列进行验证即可。验证过程很简单,因为是一个排列,所以任意时刻栈是否需要弹出是完全确定的。
设想已给出的前k个数中,最大的数为ai,剩下的n-k个数字中,最大数为aj,最小数为ak。如果ai<ak,只需将所有数字从大到小排序加入。如果ai>ak,那么在aj的右边不应该有小于ai的数字出现,所以aj及其右边的序列构造应为:把[ai+1,n]区间内未被选中的数字从大到小排列的结果,依此类推,可得其余的数字的排列。
Tree Destruction
找到树的一条直径,之后树的其余部分可以看成挂在直径上的森林,对于不在直径上的点,其删除时应选择距离较远的直径端点,删除直径上的点所能得到最大值为d*(d-1)/2。
设直径某一端点为s,其中两棵树分别挂在di和dj上,di上有叶节点ai,dj上有叶节点aj。若删除时不选直径端点而是选另一棵树上的叶节点得到的价值更大,
Mass Change Queries
想不出来,操作必须按顺序进行,这点很烦,但是这题可以通过编译时加优化选项朴素过。