NC14583 糖糖别胡说,我真的不是签到题目
NC14583 糖糖别胡说,我真的不是签到题目
题目
题目描述
从前,有 \(n\) 只萌萌的糖糖,他们分成了两组一起玩游戏。他们会排成一排,第 \(i\) 只糖糖会随机得到一个能力值 \(b_i\)。从第 \(i\) 秒的时候,第 \(i\) 只糖糖就可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的糖糖。
为了使游戏更加有趣,糖糖的爸爸,娇姐,会发功 \(m\) 次,第 \(i\) 次发功的时间为 \(c_i\) ,则在第 \(c_i\) 秒结束后 \(b_1,b_2,.....,b_{c_i}\) 都会增加 \(1\) 。
现在,娇姐想知道在第 \(n\) 秒后,会有多少只糖糖存活下来。
输入描述
第一行只有一个整数 \(T\)(\(T<6\)) ,表示测试数据的组数。
第二行有两个整数 \(n,m\) 。表示糖糖的个数以及娇姐发功的次数。(\(1 \leq n\leq 50000,1 \leq b_i \leq 1000000\))
第三行到 \(n+2\) 行,每行有两个整数 \(a_i,b_i\) ,表示第 \(i\) 只糖糖属于那一组以及他的能力值。(\(0\leq a_i \leq 1,1\leq b_i\leq 1000000\))
第 \(n+3\) 行到第 \(n+m+2\) 行,每行有一个整数 \(c_i\) ,表示GTW第 \(i\) 次发功的时间.(\(1\leq c_i \leq n\))
输出描述
总共 \(T\) 行,第 \(i\) 行表示第 \(i\) 组数据中,糖糖存活的个数。
示例1
输入
1
4 3
0 3
1 2
0 3
1 1
1
3
4
输出
3
题解
思路
知识点:后缀最大值+差分。
每一只糖糖的状态之和后面的糖糖有关,从正向遍历每次要重复考虑之前区间糖糖的状态,从反向遍历可以通过更新已遍历区间的最大值来决定遍历到的糖糖的状态。
第 \(i\) 次发功后会造成 \([0,c_i]\) 糖糖数值加一,显然每次增加不会影响后面的糖糖状态。正向遍历每次都给对应区间整体加一,不能满足复杂度;反向遍历用 \(delta\) 来记录到某个糖糖为止增加的次数,从而在之后用 \(b_i+delta\) 代替 \(b_i\) 达到增加的效果。
时间复杂度 \(O(n+m)\)
空间复杂度 \(O(n+m)\)
代码
#include <bits/stdc++.h>
using namespace std;
bool a[50007];
int b[50007];
int c[50007];
int main(){
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
for(int i = 1;i<=n;i++){
c[i] = 0;
cin>>a[i]>>b[i];
}
for(int i = 0;i<m;i++){
int tmp;
cin>>tmp;
c[tmp]++;
}
int delta = 0,ans = n,max0 = 0,max1 = 0;
///一个糖糖的死活只和后面糖糖最大值有关
for(int i = n;i>=1;i--){
delta+=c[i];///区间增值是向前的,所以可以逆向累加
if(a[i]){
ans -= (b[i]+delta)<max0;
max1 = max(b[i]+delta,max1);
}
else{
ans -= (b[i]+delta)<max1;
max0 = max(b[i]+delta,max0);///更新最大值为当前值+增值
}
}
cout<<ans<<'\n';
}
return 0;
}
NC14583 糖糖别胡说,我真的不是签到题目的更多相关文章
- 执行update语句mysql5.6报错ERROR 1292 (22007): Truncated incorrect DOUBLE value: '糖糖的坤大叔'
执行修改语句update tbl_user_details set nickname=CONCAT("用户",yunva_id) where nickname = yunva_id ...
- runtime MethodSwizzle 实践之 奇怪crash : [UIKeyboardLayoutStar release]: message sent to deallocated instance
情景: 使用MethodSwizzle 实现对数组.字典 等系统方法的安全校验.显然能达到预期效果,但实际发现当 键盘显示的情况下 home app 进入后台,再单击app 图标 切换回前台时 发 ...
- Visual Studio 2015 & C#6.0
Visual Studio 2015 & C#6.0 试用报告,持续更新. 昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...
- Visual Studio 2015 & C#6.0 试用报告,持续更新。
昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不提,C#常年被人指责跨平台性不佳,我也是无能为力.即使有Mono等第三方跨平台工程,.NET ...
- java8--List转为Map、分组、过滤、求和等操作----代码示例
Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...
- 【JS复习笔记】03 继承(从ES5到ES6)
前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...
- js中的类
概述 经典的老书害人啊,全是讨论怎么解决javascript里面用函数形式定义类的坑.结果es2015直接用class关键字解决了所有问题.虽然class关键字没有什么新东西,只是js现有继承结构的语 ...
- 关于IEnumerator<T>泛型枚举器 和 IEnumerable<T>
在开发中我们经常会用到 IEnumerable<T> xxx 或者 List<T> xxx 这种集合或者集合接口,实际上就是一个线性表嘛然后结合C#提供的语法糖 foreach ...
- Python学习 day09
一.文件的修改 python中修改文件,可以直接通过write实现,但这种方法均比较局限.若有需求:将文件中的某内容替换为新内容,其他内容保持不变.这种需求write理论上是可以实现的,可以将一个文件 ...
随机推荐
- Linux(ubuntu)二进制安装mysql8.0
mysql官方网站下载地址:https://dev.mysql.com/downloads/mysql/ 1.创建mysql运行用户和组 groupadd -g 1001 mysql useradd ...
- 【第五课】VIM编辑器(学习笔记)
4月10日学习笔记打卡
- 4.27-Postman和JMeter总结及实战描述
一.数据格式 常用的请求方法有8种,但是最常用的有4-5种 1.GET 获取资源 2.POST 添加资源(对服务端已存在的资源也可以做修改和删除操作) 3.PUT 修改资源 4 .DELETE删除资源 ...
- javase集合 温故而知新
复习javase集合 1.为什么要有集合? 数组长度需要在初始化时确定大小,数据结构单一.因此集合出现了 2.数组和集合的区别 区别一:数组既可以存储基本数据类型,又可以存储引用类型,集合只能存储引用 ...
- 新作!分布式系统韧性架构压舱石OpenChaos
摘要:本文首先以现今分布式系统的复杂性和稳定性的需求引出混沌工程概念,并阐述了OpenChaos在传统混沌工程上的优化与创新. 背景 随着Serverless,微服务(含服务网格)与越来越多的容器化架 ...
- 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁
创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...
- 详解CVE-2022-0847 DirtyPipe漏洞
摘要:本文详细介绍了CVE-2022-0847漏洞形成根因,相应补丁修复方法,通过本文让读者对CVE-2022-0847漏洞有更清晰的了解. 本文分享自华为云社区<CVE-2022-0847 D ...
- 110_Power Pivot特殊结算日期及财年日期
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 前几天看到群里有朋友在搞特殊结算日期,主要不是按照正常日期里的整月,按照比如:上月21号至本月20号作为结算周期 ...
- Python实现将csv文件转化为html文件
核心技术: Pandas 需要转化的csv文件(business.csv): 源代码: import pandas as pd f=pd.read_csv("business.csv&quo ...
- 定制ASP.NET 6.0的应用配置
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本文的主题是应用程序配置.要介绍的是如何使用配置.如何自定义配置,以采用不同的方式 ...