zoukankan      html  css  js  c++  java
  • P6617 Search

    Problem

    给一个长度为(n)的序列(a)和一个正整数(w)(m)次操作,每次操作为:

    • 1 x y 修改(a_x)(y)
    • 2 l r 查询是否存在(i,j)满足(l le i < j le r),且(a_i + a_j = w)

    (1 le x le n,0 le y le w,1 le l le r le n le 5 imes 10^5)
    时限4s。

    Solution

    Thinking 1

    考虑(1 le n,m,w le 2 imes 10^3)的部分分。
    每次暴力修改,然后询问搞个桶瞎搞可以做到(mathcal{O}(mn))

    Thinking 2

    考虑只有查询的部分分。
    定义(nxt_i = min{j mid j > i,a_i + a_j = w})
    那么询问变为查询是否(min_{i = l}^r {nxt_i} le r)
    (nxt_i)用set瞎搞一下就行了。
    因为没有修改,可以用ST表搞一搞(min)

    Thinking 3

    考虑在Thinking 2的基础上加上修改。
    我们发现,对于一个修改(x,y),考虑会影响哪些:

    • (nxt_x)
    • 所有满足(nxt_i = x)
      我们发现第二个太毒瘤了!修改太多!
      然后xjb改一下定义就是了。
  • 相关阅读:
    自己收集的一些伪元素/伪类
    ie9的placeholder不显示的解决办法(包含多个密码框)
    9.14上午
    9.13
    9.11笔记
    html基础英语单词
    选择器的分辨
    学习笔记
    RecyleView
    自定义view获取宽高
  • 原文地址:https://www.cnblogs.com/luyiming123blog/p/15133729.html
Copyright © 2011-2022 走看看