zoukankan      html  css  js  c++  java
  • CF193D

    讲个笑话:tzc 告诉我 hb 给他们讲了 193B(*2000),我看成了 193D(*2900),然后还真自己做出来了(


    首先有一个平方(或者带 log)级别的暴力:枚举组成的等差数列的左右端点,然后判是否可行。很有优化前途。

    我们考虑一个套路的扫描线:枚举右端点,维护关于左端点的可行性序列。

    考虑一对左右端点可行的充要条件。显然有,当且仅当它们组成 (leq 2) 个区间(连通块)。于是我们考虑维护关于左端点的连通块数量序列。考虑新加进一个 (r) 会让 (l) 们对应的连通块数量获得哪些变化。

    这个其实不难。先考虑把 (r) 令为一个单独的连通块整体 (+1)。然后考虑合并,显然对左边和右边能合并当且仅当它被 ([l,r-1]) 包含。那么合并 (0,1,2) 显然分别是区间。

    那么问题就转化为了区间 (pm 1),区间数 (1,2)。这个东西我见过不止一遍了(最初的思路来自 rng,然而现在他 goodbye 了),所以秒掉了:考虑线段树的每个节点维护最小值、最小值出现次数、次小值、次小值出现次数,那么显然可上传可懒标记。查询的时候,由于如果有 (1,2) 的话那么它们必定是最小值或者次小值,直接查就可以了。

    所以说 *2900 应该是因为远古场的原因。但是有个细节:合并的时候有可能出现左儿子的次小值小于右儿子的最小值,分类讨论出错了,可以直接放进数组大力 sort。调死爷辣!

    code

  • 相关阅读:
    mui 单页面下拉刷新
    phpStorm格式化代码快捷键
    mui 子页面切换父页面底部导航
    Java连接Mysql的基本用法
    string替换所有指定字符串(C++)
    MySql与Java的时间类型
    MYSQL中防止插入重复记录的解决方案(无重复值更新)
    Java数据库连接池封装与用法
    Java中数据库连接池原理机制的详细讲解(转)
    Fedora14使用yum安装mysql
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cf193d.html
Copyright © 2011-2022 走看看