zoukankan      html  css  js  c++  java
  • 【20181024T3】小C的宿舍【分治】

    题面

    【错解】

    好像就是(|i-j|+|a_i - b_i|)

    嗯开始都加i-1,跑一遍,1~(i-1)加1,i~n 减1,线段树维护。

    过样例了呢

    哎大样例怎么多了那么多啊

    跑了个暴力,多得更多啊(雾

    是不是数据有问……

    woc好像有下去再上来的情况

    打个暴力滚粗,30pts

    【正解】

    考虑分治

    每次取mid递归

    [ mn_{x}=left{ egin{aligned} min _{i=x}^{mid} {h_{i}} qquad x leq mid\ min _{i=mid+1}^{x} {h_{i}} qquad x > mid end{aligned} ight. ]

    我们考虑i,j在mid两边。i,j的距离相当于(h_i + h_j +j-i -2min{mn[i],mn[j]})

    即我们要求(h_i + h_j +j-i -2min{mn_i,mn_j} leq k)的点对数

    挪一下就可以得到4个不等式

    min看着很碍眼,考虑消掉

    我们可以吧mn排序,这样前面的mn一定大/小于后面的,即在前面mn和在后面的mn比较时一定前一个较大/小

    这样可以用平衡树/权值线段树/树状数组/二分查找(大雾)

    然后分四种情况就可以了

    复杂度(O(Nlog_N^2))

    代码

  • 相关阅读:
    如何做兼容性测试
    python批量转换excl为csv
    mysql删除用户后再次创建用户报错
    xadmin
    CORS跨域资源共享
    drf自定义公共组件
    luffy项目前端初始化
    luffy项目后端初始化
    企业级项目的环境准备
    base64编码的使用
  • 原文地址:https://www.cnblogs.com/lstoi/p/9845622.html
Copyright © 2011-2022 走看看