• 模拟测试20191029


    $T1:数列$

    所以这题和数列没什么关系

    显然对于每个数答案是个单谷

    直接三分,复杂度$O(nloga)$

    然而这题其实不用三分,显然答案只在x的最小正整数解和最大负整数解时得到

    $O(1)$可求,复杂度$O(n)$

     

    $T2:数对$

    考场上在(数据删除)打出"(数据删除)"后想到的解法

    由于这题最终构建出来的序列$a$和$b$都不单调,我们不容易构造一个正确的排序方法保证拓扑序

    那么我们可以换一个思路,不再一个一个加入新的数,而是把数插入已有序列

    那么我们把数对按照$b$排序

    设目前数组为$(10,2) (1,3) (2,5) (10,11)$ ($(a,b)$表示题中的$a,b$)

    我们倒着扫排序后的数组,假设我们当前在处理$(10,2)$

    由于$10$太大,$(10,2)$无法放在$(1,3),(2,5)$之前,只能放在$(10,11)$之前

    然而直接用$(10,11)$转移$(10,2)$会导致丢失了$(1,3)(2,5)$两个数对,他们显然是可以做贡献的

    但是我们发现由于我们按照$b$排序,使得当前处理数对的$b$一定是最小的

    所以跳过部分的贡献即为跳过部分所有$a<=b_{i}$的点对的权值和

    即$dp_{i}$=$maxlimits _{b_{j}geq a_{i}} (dp_{j}+sumlimits _{k=i+1,a_{k}<=b_{i}}^{j-1}w_{k})$

    把dp变成后缀max则有

    $dp_{i}$=$ dp_{j}+sumlimits _{k=i+1,a_{k}<=b_{i}}^{j-1}w_{k}$ $j$为第一个$b_{j}geq a_{i}$的点

    主席树优化一下

    $T3:最小距离$

    以所有特殊点为起点跑最短路,同时维护最短路的起点是谁

    然后枚举所有边,如果两端点是从不同特殊点到达,则更新答案

     

  • 相关阅读:
    排序算法之--堆排序
    排序算法之--插入排序
    排序算法之--直接选择排序
    排序算法之--快速排序(及优化测试亿级100_000_000用时)
    分布式计算--(分布式+多进程+多线程+多协程)
    HDU
    2019牛客多校第四场D-triples I 贪心
    Interview_C++_day8
    Interview_C++_day7
    Interview_C++_day6
  • 原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11758309.html
Copyright © 2020-2023  润新知