news 2026/4/3 6:27:25

《P3168 [CQOI2015] 任务查询系统》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《P3168 [CQOI2015] 任务查询系统》

题目描述

最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。

超级计算机中的任务用三元组 (si​,ei​,pi​) 描述,(si​,ei​,pi​) 表示任务从第 si​ 秒开始,在第 ei​ 秒后结束(第 si​ 秒和 ei​ 秒任务也在运行),其优先级为 pi​。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。

调度系统会经常向查询系统询问,第 xi​ 秒正在运行的任务中,优先级最小的 ki​ 个任务(即将任务按照优先级从小到大排序后取前 ki​ 个)的优先级之和是多少。

特别的,如果 ki​ 大于第 xi​ 秒正在运行的任务总数,则直接回答第 xi​ 秒正在运行的任务优先级之和。上述所有参数均为整数,时间的范围在 [1,n] 之间。

输入格式

输入文件第一行包含两个空格分开的正整数 m 和 n,分别表示任务总数和时间范围。

接下来 m 行,每行包含三个空格分开的正整数 si​,ei​,pi​(si​≤ei​),描述一个任务。

接下来 n 行,每行包含四个空格分开的整数 xi​,ai​,bi​,ci​,描述一次查询。

本题强制在线。查询的参数 ki​ 需要由公式 ki​=1+(ai​×pre+bi​)modci​ 计算得到。其中 pre 表示上一次查询的结果,定义初始 pre=1 。

输出格式

输出共 n 行,每行一个整数,表示查询结果。

输入输出样例

输入 #1复制

4 3 1 2 6 2 3 3 1 3 2 3 3 4 3 1 3 2 1 1 3 4 2 2 4 3

输出 #1复制

2 8 11

说明/提示

【样例解释】

k1​=(1×1+3)mod2+1=1;

k2​=(1×2+3)mod4+1=2;

k3​=(2×8+4)mod3+1=3。

【数据范围】

对于 100% 的数据,1≤m,n,ci​≤105,0≤ai​,bi​≤105,1≤si​≤ei​≤n,1≤pi​≤107,xi​ 为 1 到 n 的一个排列。

注:2024-12-28 加入一个 hack 数据,帖子链接。

代码实现:

#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N=100010; const int M=N*40; struct tsk{ int e, v, tg; bool operator < (const tsk &r) const{ return e<r.e; } tsk(int e,int v,int tg):e(e),v(v),tg(tg){} tsk(){} }b[N*3]; struct pt{ ll s, sz; int l, r; }tr[M]; int rt[N],n,m,cnt=1,tot=0,a[N]; int rd(){ int x=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();} while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return x*f; } void ins(int &now,int x,int idx,int l=1,int r=n){ tr[cnt++]=tr[now];now=cnt-1; tr[now].sz+=(ll)idx; tr[now].s+=(ll)idx*a[x]; if (l==r)return; int mid=(l+r)>>1; if (x<=mid)ins(tr[now].l,x,idx,l,mid); else ins(tr[now].r,x,idx,mid+1,r); } ll qry(int now,int k,int l=1,int r=n){ if (l==r)return tr[now].s/tr[now].sz*(ll)k; int mid=(l+r)>>1; int t=tr[tr[now].l].sz; if (k<=t)return qry(tr[now].l,k,l,mid); else return tr[tr[now].l].s + qry(tr[now].r,k-t,mid+1,r); } int main(){ m=rd(),n=rd(); for (int i=1;i<=m;i++){ int x=rd(),y=rd(),z=rd(); b[++tot]=tsk(x,z,1); b[++tot]=tsk(y+1,z,-1); a[i]=z; } sort(a+1,a+m+1); sort(b+1,b+tot+1); rt[0]=0; for (int i=1,j=1;i<=n;i++){ rt[i]=rt[i-1]; for (;j<=tot && b[j].e==i;j++){ int rk=lower_bound(a+1,a+n+1,b[j].v)-a; ins(rt[i],rk,b[j].tg); } } ll ans=1; for (int i=1;i<=n;i++){ ll x=rd(),A=rd(),B=rd(),C=rd(); ll k=(A*ans+B)%C+1; if (k>=tr[rt[x]].sz)ans=tr[rt[x]].s; else ans=qry(rt[x],k); printf("%lld\n",ans); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 0:32:32

【课程设计/毕业设计】基于springboot+小程序的家校通程序设计与实现消息推送、班级管理、作业管理、考勤管理、成绩管理【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/1 22:14:20

(100分)- 单向链表中间节点(Java JS Python)

(100分)- 单向链表中间节点&#xff08;Java & JS & Python&#xff09;题目描述求单向链表中间的节点值&#xff0c;如果奇数个节点取中间&#xff0c;偶数个取偏右边的那个值。输入描述第一行 链表头节点地址 后续输入的节点数n后续输入每行表示一个节点&#xff0c;…

作者头像 李华
网站建设 2026/3/24 21:05:57

《分布式追踪Span-业务标识融合:端到端业务可观测手册》

分布式追踪体系的核心价值本应是打通全链路的可观测性&#xff0c;但传统Span数据仅聚焦于技术调用的时序与拓扑维度&#xff0c;缺失业务维度的锚点&#xff0c;导致追踪结果始终停留在技术层面的链路排查&#xff0c;无法与真实业务场景形成联动&#xff0c;这成为了可观测体…

作者头像 李华
网站建设 2026/4/3 4:15:57

Python快速入门——学习笔记(持续更新中~)

Python 软件安装 & 环境配置 基础阶段创建文件打印输出变量赋值数学计算结语 软件安装 & 环境配置 首先要想在电脑上运行python文件 就需要两个东西 一个是解释器 一个是编辑器 二者缺一不可 解释器直接用官方的就行 编辑器我推荐pycharm 当然也可以用vscode等等 安…

作者头像 李华
网站建设 2026/3/20 3:32:26

基于springboot的群众网上高效办事系统的设计与实现

文章目录 详细视频演示项目介绍技术介绍功能介绍核心代码系统效果图源码获取 详细视频演示 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 基于 Spring Boot 的群众网上高效办事系统&#xff0c;是一款聚焦政务服务数字化转型的综合…

作者头像 李华
网站建设 2026/3/1 23:38:10

同城跑腿APP源码部署攻略:从后端接口到前端UI的完整开发路径

博主介绍&#xff1a; 所有项目都配有从入门到精通的安装教程&#xff0c;可二开&#xff0c;提供核心代码讲解&#xff0c;项目指导。 项目配有对应开发文档、解析等 项目都录了发布和功能操作演示视频&#xff1b;项目的界面和功能都可以定制&#xff0c;包安装运行&#xff…

作者头像 李华