news 2026/5/7 13:52:34

《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/4/28 19:50:13

《边缘受限设备API客户端轻量化与功能适配实战指南》

不同IoT终端的资源禀赋与业务诉求存在天壤之别,环境感知类终端仅需完成基础数据上报的核心交互,工业现场传感终端则需兼顾指令接收与状态回传,楼宇监测终端还需适配间歇性的断网续传需求,这就决定轻量化设计绝不能采用一刀切的模式,必须基于终端硬件参数台账与业务场景图谱…

作者头像 李华
网站建设 2026/5/3 9:33:37

基于SpringBoot和Vue的实验室预约系统设计与实现

文章目录 详细视频演示项目介绍技术介绍功能介绍核心代码系统效果图源码获取 详细视频演示 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 基于Spring Boot的实验室预约系统采用前后端分离架构&#xff0c;后端以Spring Boot为核心框…

作者头像 李华
网站建设 2026/5/5 10:11:01

从企业能耗集采到区域碳管理-智慧能源平台开发指南

先上干货&#xff01; 墙内仓库地址&#xff08;码云&#xff09;&#xff1a;https://gitee.com/guangdong122/energy-management 已同步更新到 github 仓库 温馨提示&#xff1a;文末有资源获取方式~ 能源系统|能源系统源码|企业能源系统|企业能源系统源码|能源监测系统 一…

作者头像 李华
网站建设 2026/4/23 12:12:19

机器学习面试问题及答案

摘要&#xff1a;本文整理了50个机器学习面试问题及答案&#xff0c;涵盖基础概念到高级应用。基础部分包括机器学习定义、监督/无监督学习、过拟合/欠拟合及解决方法、正则化、特征工程等核心概念。中级部分涉及线性回归、逻辑回归、决策树、随机森林等常用算法原理。高级部分…

作者头像 李华
网站建设 2026/5/3 17:50:45

二维钻孔封孔效果模拟案例解析

二维钻孔封孔效果模拟案例 钻孔封孔这事儿听着简单&#xff0c;实际在地下工程里可是个技术活。今天咱们拿MATLAB的PDE工具箱做个二维模拟&#xff0c;看看封孔材料怎么影响密封效果。先别急着关页面&#xff0c;代码部分我尽量说得像唠嗑&#xff0c;保证不催眠。 先整点基础…

作者头像 李华