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 糖糖别胡说,我真的不是签到题目的更多相关文章

  1. 执行update语句mysql5.6报错ERROR 1292 (22007): Truncated incorrect DOUBLE value: '糖糖的坤大叔'

    执行修改语句update tbl_user_details set nickname=CONCAT("用户",yunva_id) where nickname = yunva_id ...

  2. runtime MethodSwizzle 实践之 奇怪crash : [UIKeyboardLayoutStar release]: message sent to deallocated instance

    情景: 使用MethodSwizzle 实现对数组.字典 等系统方法的安全校验.显然能达到预期效果,但实际发现当 键盘显示的情况下  home app 进入后台,再单击app  图标 切换回前台时 发 ...

  3. Visual Studio 2015 & C#6.0

      Visual Studio 2015 & C#6.0 试用报告,持续更新.   昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...

  4. Visual Studio 2015 & C#6.0 试用报告,持续更新。

    昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不提,C#常年被人指责跨平台性不佳,我也是无能为力.即使有Mono等第三方跨平台工程,.NET ...

  5. java8--List转为Map、分组、过滤、求和等操作----代码示例

    Java 8 函数式编程风格 Java 迄今为止最令人激动的特征.这些新的语言特征允许采用函数式风格来进行编码,我们可以用这些特性完成许多有趣的功能.这些特性如此有趣以至于被认为是不合理的.他们说会影 ...

  6. 【JS复习笔记】03 继承(从ES5到ES6)

    前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...

  7. js中的类

    概述 经典的老书害人啊,全是讨论怎么解决javascript里面用函数形式定义类的坑.结果es2015直接用class关键字解决了所有问题.虽然class关键字没有什么新东西,只是js现有继承结构的语 ...

  8. 关于IEnumerator<T>泛型枚举器 和 IEnumerable<T>

    在开发中我们经常会用到 IEnumerable<T> xxx 或者 List<T> xxx 这种集合或者集合接口,实际上就是一个线性表嘛然后结合C#提供的语法糖 foreach ...

  9. Python学习 day09

    一.文件的修改 python中修改文件,可以直接通过write实现,但这种方法均比较局限.若有需求:将文件中的某内容替换为新内容,其他内容保持不变.这种需求write理论上是可以实现的,可以将一个文件 ...

随机推荐

  1. python基础练习题(题目 画菱形)

    day15 --------------------------------------------------------------- 实例022:画菱形 题目 打印出如下图案(菱形):. * * ...

  2. ElasticSearch7.3学习(二十)----采用restful风格查询详解

    1.Query DSL入门 1.1 DSL DSL:Domain Specified Language,特定领域的语言.es特有的搜索语言,可在请求体中携带搜索条件,功能强大. 查询全部 GET /b ...

  3. 【转】python代码优化常见技巧

    https://blog.csdn.net/egefcxzo3ha1x4/article/details/97844631

  4. 【kubernetes 问题排查】使用 kubeadm 部署时遇到的问题

    引言 再使用kubeadm部署集群时会多少遇到一些问题,这里做下记录,方便后面查找问题时有方向,同时也为刚要入坑的你指明下方向,让你少走点弯路 问题汇总 The connection to the s ...

  5. FreeRTOS --(13)任务管理之空闲任务

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107180016 创建完毕任务,启动调度器,任务控制,系统 SysTick 来临后判断是 ...

  6. 完爆Docker!推荐你看下这个....

    现如今,互联网行业的每个人都知道数据的价值,很多人也为此学了一堆的数据分析工具,但面对问题,还是不知道如何去分析. 我们在奔向升职加薪的路上,总会遇到这些问题: 面对数据问题,没有思路,怎么办? 面对 ...

  7. 【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)

    问题描述 在上一篇博文<[Azure Developer]使用 adal4j(Azure Active Directory authentication library for Java)如何来 ...

  8. vue-router实现原理及简易demo

    自定义路由demo,git地址: git@github.com:xsk-walter/Vue-router.git 一.router基本使用 ① 创建和路由相关的组件 ②Vue.use(vueRout ...

  9. 709. To Lower Case - LeetCode

    Question 709. To Lower Case Sollution 题目大意:字符串大写转小写 思路: 直接调用Java API函数 字符串转char数组,遍历数组,判断如果大写就转小写 Ja ...

  10. RealEvo-IDE安装

    双击"InstallWizard.exe"启动安装程序 点击"Install RealEvo-IDE"启动 RealEvo-IDE 安装程序 选择"下 ...