解法一前置知识:差分数组

解法二前置知识:线段树

试题编号: 202203-2
试题名称: 出行计划
时间限制: 1.5s
内存限制: 512.0MB
问题描述:

问题描述

最近西西艾弗岛上出入各个场所都要持有一定时限内的核酸检测阴性证明。

具体来时,如果在 t 时刻做了核酸检测,则经过一段时间后可以得到核酸检测阴性证明。这里我们假定等待核酸检测结果需要 k 个单位时间,即在 t+k 时刻可以获得结果。如果一个场所要求持 24 个单位时间内核酸检测结果入内,那么凭上述的核酸检测结果,可以在第 t+k 时刻到第 t+k+23 时刻进入该场所。

小 C 按时间顺序列出接下来的 n 项出行计划,其中第 i 项(1≤i≤n)可以概括为:
ti 时刻进入某场所,该场所需持有 ci 个单位时间内的核酸检测结果入内,其中 0<ci≤2×105。

为了合理安排核酸检测时间,试根据小 C 的出行计划,回答如下查询:

  • 如果在 q 时刻做了核酸检测,有多少项出行计划的核酸检测要求可以得到满足?

这样的查询共有 m 个,分别为 q1,q2,⋯,qm;查询之间互不影响。

输入格式

输入的第一行包含空格分隔的三个正整数 n、m 和 k,分别表示出行计划数目、查询个数以及等待核酸检测结果所需时间。

接下来输入 n 行,其中每行包含用空格分隔的两个正整数 ti、ci,表示一项出行计划;出行计划按时间顺序给出,满足 0<t1≤t2≤⋯≤tn≤2×105。

最后输入 m 行,每行仅包含一个正整数 qi,表示一个查询。m 个查询亦按照时间顺序给出,满足 0<q1<q2<⋯<qm≤2×105。

输出格式

输出共 m 行,每行一个整数,表示对应查询的答案。

样例输入

6 2 105 2410 2411 2434 2435 2435 481
2

Data

样例输出

3
3

Data

样例解释

时刻 1 做检测,可以满足第三、四、六项出行计划;

时刻 2 做检测,可以满足第四、五、六项出行计划。

子任务

40% 的测试数据满足 0<n,k≤1000、m=1;

70% 的测试数据满足 0<n,m,k≤1000;

全部的测试数据满足 0<n,m,k≤105。

题目本质:每个出行计划都代表一个区间。每次查询就是查询当前时间x在k时间后(即x+k)被多少个区间包含。

解法一:差分数组(最好想、码量最少的解法)

差分数组适合于多次区间修改,极少区间查询或者先区间修改再区间查询,不是边修改边查询的情况。本题使用差分数组,每个出行计划就是对有效区间的操作。最后前缀和统计一下,随后查询即可。

/*
差分数组版本,五分钟就AC,比线段树好太多了
*/#include <cstdio>
#define fi(i,l,r) for(int i=(l);i<=(r);++i)
#define fd(i,r,l) for(int i=(r);i>=(l);--i)using namespace std;int n,m,t;
int x,y;
int a[300005];template<typename T>void Read(T &x)
{x=0;T k=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') k=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}x*=k;
}
template<typename T>void Print(T x)
{if(x<0){putchar('-');Print(-x);return;}//这个return很重要,某些情况可能出错if(x>9) Print(x/10);putchar((x%10)^48);
}int main (void)
{Read(n);Read(m);Read(t);while(n--){Read(x);Read(y);a[x-y<0?1:x-y+1]++;a[x+1]--;}fi(i,1,300004)a[i]+=a[i-1];while(m--){Read(x);Print(a[x+t]);putchar('\n');}return 0;
}

解法二:线段树(码量较多)

线段树区间修改和区间查询都在log级别,也是符合要求的。本题只需要写单点查询就行,所以和一般的线段树模板有一定的区别。

#include <cstdio>
#define fi(i,l,r) for(int i=(l);i<=(r);++i)
#define fd(i,r,l) for(int i=(r);i>=(l);--i)
#define lc (rt<<1)
#define rc ((rt<<1)|1)
#define mid ((R+L)>>1)using namespace std;
const int N=300005;int n,m,t;
int x,y;
struct arr{int add,val;
}str[N<<2];//线段树一般要开到四倍大 template<typename T>void Read(T &x)
{x=0;T k=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') k=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}x*=k;
}
template<typename T>void Print(T x)
{if(x<0){putchar('-');Print(-x);return;}//这个return很重要,某些情况可能出错if(x>9) Print(x/10);putchar((x%10)^48);
}void pushUp(int rt)
{str[rt].val=str[lc].val+str[rc].val;
}void pushDown(int rt,int L,int R)
{str[lc].val+=str[rt].add*(mid-L+1);str[rc].val+=str[rt].add*(R-mid);str[lc].add+=str[rt].add;str[rc].add+=str[rt].add;str[rt].add=0;
}void Upd(int rt,int L,int R,int ul,int ur,int addVal)
{if(L>ur||R<ul) return;if(ul<=L&&ur>=R){str[rt].add+=addVal;str[rt].val+=addVal*(R-L+1);return;}if(str[rt].add!=0) pushDown(rt,L,R);if(ul<=mid) Upd(lc,L,mid,ul,ur,addVal);if(ur>mid) Upd(rc,mid+1,R,ul,ur,addVal);pushUp(rt);
}int Query(int rt,int L,int R,int x)
{if(L==x&&R==x) return str[rt].val;if(str[rt].add!=0) {pushDown(rt,L,R);pushUp(rt);}if(x<=mid) return Query(lc,L,mid,x);else return Query(rc,mid+1,R,x);
}int main (void)
{Read(n);Read(m);Read(t);while(n--){Read(x);Read(y);Upd(1,1,300000,x-y<0?1:x-y+1,x,1);}while(m--){Read(x);Print(Query(1,1,300000,x+t));putchar(10);}return 0;
}

CSP认证 202203-2 出行计划(多种解法)相关推荐

  1. CSP 202203 题解:未初始化警告,出行计划,计算资源调度器,通信系统管理,博弈论与石子合并

    试题内容请前往CCF官网查看: CCF-CSP计算机软件能力认证考试 http://118.190.20.162/home.page CCF 官方题解请点击这里. 阅读本题解前,您应当了解下列知识: ...

  2. CSP 202203-2出行计划

    问题分析: 差分板子.根据题意描述可以反推得到对于每个出行计划合法的核酸检测的时间区间.假设在x时刻进入公共场所,其需要c小时内的核酸证明,k小时候出核酸结果可以推出这个合法区间为[x−k−c+1,x ...

  3. 以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系

    原文链接:以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系 发布单位:学会      发布时间:2017-01-20 16:16 作者:陆建峰    余立功 摘要:为提升计算机专业类学生 ...

  4. CSP认证近两期试题汇总

    前言 因为了学分的需要,准备参加CSP认证,结果发现这个比赛没有题解,平台也没有提供相关讨论方式,因此决定以此来记录本人刷题解答.希望能够帮到大家,共同进步. 本人主要使用python刷题,但是pyt ...

  5. ~3 ccf 2022-03-2 出行计划

    出行计划 题目描述 输入 输出 样例输入 样例输出 源代码 关于这题 题目描述 输入 输出 样例输入 6 2 10 5 24 10 24 11 24 34 24 35 24 35 48 1 2 样例输 ...

  6. CSP认证-现值计算、训练计划、JPEG 解码、聚集方差

    CSP认证-现值计算.训练计划.JPEG 解码.聚集方差 文章目录 CSP认证-现值计算.训练计划.JPEG 解码.聚集方差 T1现值计算 T2训练计划 T3JPEG 解码 T4聚集方差 博主原创,转 ...

  7. 【ccf】20220302出行计划

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 问题描述 思路 :差分方法 差分解法过程 代码 问题描述 思路 :差分方法 根据题目的意思,给出一个做核酸的时间q,要计算出 ...

  8. CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版

    CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.Scanner;public class Mai ...

  9. CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版

    CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util. ...

最新文章

  1. 安卓照片迁移苹果_转区功能终于上线,安卓苹果可互相迁移,20块一次,每天限量5000名额!...
  2. Crystal Reports 财务日记帐凭证套打设计
  3. python统计excel中重复数据_EXCEL公式解读:统计不重复个数
  4. eclipse maven创建web项目
  5. WebBrowser 控件 内存溢出 补丁 From Microsoft
  6. 使用jquery简化ajax开发
  7. 字模提取工具-PCtoLCD2002使用说明
  8. mysql语句alter table_sql语句中ALTER TABLE MODIFY和ALTER TABLE CHANGE的区别?
  9. 维基百科语料库训练词向量
  10. 计算机等级考试四级--数据库原理
  11. k3 修复服务器,金蝶K3数据修复服务工具包
  12. 【编译原理】 根据语法树 写出对应的短语 直接短语 句柄 构造产生式
  13. 衡量机器学习算法的准确性标准
  14. 给客户一个“无法拒绝”的SaaS?——6年三个SaaS项目后的感触
  15. 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
  16. 1.0、Python概述
  17. 使用css实现一个三角形
  18. opcache 缓存_缓存帽子戏法:Zend Opcache,Etags和查询缓存
  19. Rabbitmq简单模式和消息的手动应答以及Rabbitmq持久化
  20. 根据关键字选出excel中匹配的数据

热门文章

  1. 工业液晶串口屏人机界面组态软件开发指南
  2. promise 浏览器实现的源码_【更新中】浏览器相关的汇总
  3. 幼儿园装备论文计算机网络,幼儿园信息技术论文
  4. win7不在同一个网段怎么共享打印机
  5. 零基础cocos2dx游戏开发之【水果消消乐】
  6. 中年男人的职场生存画像:这一天,我都在不停道歉......
  7. mysql 返回集合大小_Mysql History list length 值太大引起的问题
  8. postgresql兴建用户_postgresql – 为什么允许新用户创建表?
  9. bert中的sep_最强NLP模型BERT可视化学习
  10. 10个在线音乐分享中文网站推荐