zoukankan      html  css  js  c++  java
  • Codeforces 1344 题解

    A

    假设所有的 ((i+a_i))(n) 意义下构成排列则答案为 YES,否则为 NO.
    时间复杂度 (O(n))(O(nlog n)).
    代码: 79150268

    B

    由于每行每列必须有至少一个 S,所以每行每列为 # 的格子要么构成一个连续区间要么不存在。
    如果某行或列不存在 #,则该行或列的格子必须放在一个不存在 # 的列或行。
    于是得到了有解的必要条件:(1) 每行每列 # 的格子要么不存在要么构成连续区间;(2) “存在一行无 #”和“存在一列无 #”二者要么同时满足要么同时不满足。
    充分性:每个连通块全放 S,再随便一个位置放 N,显然最优。
    时间复杂度 (O(nmalpha(nm))).
    代码: 79341530

    C

    首先按大小关系建图,拓扑排序,有解当且仅当无环(全放 (exists) 即可)。
    对于一个 (x_i) 而言,显然如果有 (jgt i)(i,j) 之间有大小关系(即存在一条路径从 (i)(j) 或从 (j)(i)),那么 (j) 不可以是 (forall).
    于是对每个点统计一下能到它的和它能到的点中编号最小的,如果大于它本身就可以是 (forall),否则设为 (exists),这样的方案是最优的。
    而这保证了每个 (forall) 是所有和它限制了大小关系的点中编号最小的,因此一定能构造合法解。
    时间复杂度 (O(n+m)).
    代码: 79198382

    D

    由于贡献关于 (b_i) 是凸的((f(b_i+1)-f(b_i))(b_i) 的上升而下降),所以可以考虑这样一个过程:初始时 (b_i) 都是 (0),进行 (K) 轮,每一轮选择当前 (b_ilt a_i)(Delta(b_i)=f(b_i+1)-f(b_i)) 最大的 (i),把 (b_i) 加一。
    考虑优化:每次选择的 (Delta) 单调不升,因此可以二分最终结束时的 (Delta),判断加的轮数是否 (ge K) 即可。注意二分边界,有可能 (Delta=x) 的时候个数 (lt K)(Delta=x-1) 的时候个数 (gt K),这时候随便调整一下即可。
    时间复杂度 (O(nlog W)).
    代码: 79350373

    E

    不难发现限制形如“在区间 ([l_i,r_i]) 中要操作一次 (u_i)”. 假设我们提取出所有的限制(共 (S) 个),就可以在 (O(Slog n)) 的时间内得到答案——用一个优先队列维护,每次时间后推,把所有 $lle $ 当前时间的加入优先队列,然后删去 (r) 最小的。
    由 LCT 的经典分析可知有用的限制总数是 (O(n+mlog n)) 级别。考虑用 LCT 提取出这些限制。
    每一次 access 时,当轻重边切换的时候更新切换的点的限制列表,拉成同一棵 Splay 之后打一个标记,表示这些点最后一次被 access 的时间。
    注意细节问题。无论重边切换成什么(即便是 (0))都要加到列表里,最后对列表进行处理,去掉 (0),合并相邻相同的。典型错误做法是如果切换成 (0) 则不加入列表,这样会导致后面的区间的 (l) 变大。
    时间复杂度 (O(nlog n+mlog^2 n)).
    代码: 79797116

    F

    题解: https://www.cnblogs.com/suncongbo/p/12872134.html

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/suncongbo/p/12875389.html
Copyright © 2011-2022 走看看