CodeForces 1109C. Sasha and a Patient Friend
题目简述:维护以下三种操作
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的更多相关文章
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory
Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 解题思路: 这题我根本不会做,是周指导带飞我. 首先对于当前已经有 \(m ...
- 【Codeforces 1109C 】Sasha and a Patient Friend
Codeforces 1109 C 题意:现在有个碗,每时每刻其中的水量都会加一个整数(可以为负). 给\(n\)个询问,询问有\(3\)种类型: \(1\ t\ s\):将从第\(t\)秒开始水量增 ...
- Codeforces Round #539 (Div. 1) C. Sasha and a Patient Friend 动态开点线段树
题解看这里 liouzhou_101的博客园 更简洁的代码看这里: #include <bits/stdc++.h> using namespace std; typedef long l ...
- 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} 然后就 ...
- 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 ...
- Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)
Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到 ...
- CodeForces 718C Sasha and Array
线段树. 线段树维护区间矩阵和,操作都是最简单的线段树.$lazy$标记不要记录乘了几次,直接记录乘了几次之后的矩阵就可以了,不然每次下传的时候再算一遍时间复杂度会提高. #pragma commen ...
- Codeforces 1109E. Sasha and a Very Easy Test 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109E.html 题意 给定一个长度为 n 的数列 a,以及一个模数 M(不一定是质数). 要求支持 q ...
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1109D.html 题意 所有边权都是 [1,m] 中的整数的所有 n 个点的树中,点 a 到点 b 的距离 ...
随机推荐
- 利用ChromeOptions()加载用户配置
一. 如何绕过页面登录 我们在登录网站的时候,通常需要输入用户名.密码和验证码,那么有没有办法绕过登录环节呢? 有两种方法可以解决这个问题,一种是利用chrome浏览器的用户配置,一种是利用cooki ...
- python直接赋值,浅拷贝和深拷贝
本文参考自<Python 直接赋值.浅拷贝和深度拷贝解析> 定义 直接赋值:就是对象的引用(别名) 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象 深拷贝(deepcopy):co ...
- 14-THREE.JS 聚光灯
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- hbase_异常_05_End of File Exception between local host is: "rayner/127.0.1.1"; destination host is: "localhost":9000;
一.异常信息 java.io.EOFException: End of File Exception between local host is: "ubuntu/127.0.1.1&quo ...
- 条款42:了解typename的双重含义
typename在很多种情况下与class是完全相同的,例如下面的使用: templame<typename T> ...... template<class T> ..... ...
- DataTable的用法
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- luogu 3375 KMP模板题
#include<bits/stdc++.h> using namespace std; ,M = ; int next[N]; void getNext(char s[]) //找nex ...
- 20165210 Java第三次实验报告
20165210 实验二 敏捷开发与XP实践 一.敏捷开发与XP实践-1 实验要求: http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替 ...
- OpenCV 2.4.9 +VS2013 开发环境配置
OpenCV 的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac O ...
- 洛谷 P3223 [HNOI2012]排队
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输 ...