题目简述:维护以下三种操作

1. "1 t s":在时刻$t$插入命令$s$。保证任意操作后,任意时刻至多只有一个命令。

2. "2 t":删除时刻$t$的命令。

3. "3 l r v":求最小的$t \in [l, r]$,使得$f(t)=0$,其中

$$ f(t) = v+\int_l^t g(x) \mathrm{d} x, $$

其中设在$[l, r]$时间内的命令依次为$(t_1, s_1), \dots, (t_m, s_m)$,则

$$ g(t) = \begin{cases}
0 & l \leq t < t_1 \\
s_1 & t_1 \leq t < t_2 \\
\dots \\
s_k & t_k \leq t < t_{k+1} \\
\dots \\
s_m & t \geq t_m
\end{cases}. $$

若不存在,则返回$-1$。

解:code

相关题目:[NOI2005]维护数列

我们将3种操作翻译为以下三种操作:

1. "1 t s":设时刻$t$之后的下一个命令的时刻是$t' > t$。则将$[t, t')$整个区间赋值为$s$。

2. "2 t":设时刻$t$的相邻命令的时刻是$t_1$和$t_2$,满足$t_1 < t < t_2$,并且$t_1$时刻的命令是$s_1$。则将$[t, t_2)$整个区间赋值为$s_1$。

3. "3 l r v":设时刻$l$之后最近的命令在时刻$t_0 \geq l$,令$\mathit{lsum}$表示$[t_0, r)$区间上最小的前缀和,若$v+\mathit{lsum} \leq 0$,则存在时刻$t \in [t_0, r]$,使得$f(t) = 0$。而找到具体的$t$,则可用二分法。

以上三个操作均可用线段树来维护,令

struct node
{
node *Lc, *Rc; //线段树左右儿子
int flag, set; //是否区间赋值,具体赋值
ll lsum, sum; //lsum如上定义,sum为区间求和
};

  

则可以通过以下方式维护信息

void update(node *p)
{
p->sum = p->Lc->sum+p->Rc->sum;
p->lsum = min(p->Lc->lsum, p->Lc->sum+p->Rc->lsum);
}

  

从而时间复杂度为$O(q \log V)$,其中$q$为操作个数,$V$为时刻的取值范围。

注:可预先离散化,或用平衡树来维护,将时间复杂度降至$O(q \log q)$。

CodeForces 1109C. Sasha and a Patient Friend的更多相关文章

  1. Codeforces 1109D. Sasha and Interesting Fact from Graph Theory

    Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 解题思路: 这题我根本不会做,是周指导带飞我. 首先对于当前已经有 \(m ...

  2. 【Codeforces 1109C 】Sasha and a Patient Friend

    Codeforces 1109 C 题意:现在有个碗,每时每刻其中的水量都会加一个整数(可以为负). 给\(n\)个询问,询问有\(3\)种类型: \(1\ t\ s\):将从第\(t\)秒开始水量增 ...

  3. Codeforces Round #539 (Div. 1) C. Sasha and a Patient Friend 动态开点线段树

    题解看这里 liouzhou_101的博客园 更简洁的代码看这里: #include <bits/stdc++.h> using namespace std; typedef long l ...

  4. Codeforces 1109D Sasha and Interesting Fact from Graph Theory (看题解) 组合数学

    Sasha and Interesting Fact from Graph Theory n 个 点形成 m 个有标号森林的方案数为 F(n, m) = m * n ^ {n - 1 - m} 然后就 ...

  5. Codeforces 832A. Sasha and Sticks

    It's one more school day now. Sasha doesn't like classes and is always bored at them. So, each day h ...

  6. Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)

    Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到 ...

  7. CodeForces 718C Sasha and Array

    线段树. 线段树维护区间矩阵和,操作都是最简单的线段树.$lazy$标记不要记录乘了几次,直接记录乘了几次之后的矩阵就可以了,不然每次下传的时候再算一遍时间复杂度会提高. #pragma commen ...

  8. Codeforces 1109E. Sasha and a Very Easy Test 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109E.html 题意 给定一个长度为 n 的数列 a,以及一个模数 M(不一定是质数). 要求支持 q ...

  9. Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109D.html 题意 所有边权都是 [1,m] 中的整数的所有 n 个点的树中,点 a 到点 b 的距离 ...

随机推荐

  1. for...else: 一个程序引发的陷阱

    python3菜鸟教程有一段关于for循环和else搭配的代码: for n in range(2, 10): for x in range(2, n): if n % x == 0: print(n ...

  2. lightoj1422 区间dp

    对于这一题想了很久真的是一点头绪也没有,还有组数明明是200,数据范围100,O(n^3)的复杂度居然不会爆掉(可能是因为一直在想怎么用O(n^2)的复杂度做这题 做法是先预处理dp,对于dp[i][ ...

  3. Shiro安全配置

    主要还是整合了本地ehcache,集群session管理过段时间放出 <?xml version="1.0" encoding="UTF-8"?> ...

  4. cmake安装MySQL数据库实例

    一.编译安装MySQL前的准备工作 首先检查是否有安装其他版本的编译器和数据库,先卸载干净. 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel p ...

  5. UVA 11637 Garbage Remembering Exam

    #include <iostream> #include <stdio.h> #include <cstring> #include <math.h> ...

  6. MySQL实战 | 06/07 简单说说MySQL中的锁

    原文链接:MySQL实战 | 06/07 简单说说MySQL中的锁 本文思维导图:https://mubu.com/doc/AOa-5t-IsG 锁是计算机协调多个进程或纯线程并发访问某一资源的机制. ...

  7. BZOJ4355: Play with sequence

    BZOJ4355: Play with sequence https://lydsy.com/JudgeOnline/problem.php?id=4355 分析: 模板题. 把\(2\)操作看成先区 ...

  8. ACM学习历程—SNNUOJ1213 加油站问题(动态规划 || 数学)

    题目链接:http://219.244.176.199/JudgeOnline/problem.php?id=1213 这是这次微软实习面试的一道题,当时只相出了一个2n的做法,面试官让我优化成n的做 ...

  9. 学习动态性能表(17)--v$segstat&v$segment_statistics

    学习动态性能表 第17篇-(1)-V$SEGSTAT  2007.6.13 本视图实时监控段级(segment-level)统计项,支持oracle9ir2及更高版本 V$SEGSTAT中的常用列 T ...

  10. Spark Shuffle大揭秘

    什么是Shuffle: Shuffle中文翻译为“洗牌”,需要Shuffle的关键原因是某种具有共同特征的数据需要最终汇聚到一个计算节点上进行计算. Shuffle面临的问题: 1. 数据量非常大: ...