Ascending Rating(单调队列)
题目描述
Before the start of contest, there are n ICPC contestants waiting in a long queue. They are labeled by 1 to n from left to right. It can be easily found that the i-th contestant's QodeForces rating is ai.
Little Q, the coach of Quailty Normal University, is bored to just watch them waiting in the queue. He starts to compare the rating of the contestants. He will pick a continous interval with length m, say [l,l+m−1], and then inspect each contestant from left to right. Initially, he will write down two numbers maxrating=0 and count=0. Everytime he meets a contestant k with strictly higher rating than maxrating, he will change maxrating to ak and count to count+1.
Little T is also a coach waiting for the contest. He knows Little Q is not good at counting, so he is wondering what are the correct final value of maxrating and count. Please write a program to figure out the answer.
输入
The first line of the input contains an integer T(1≤T≤2000), denoting the number of test cases.
In each test case, there are 7 integers n,m,k,p,q,r,MOD(1≤m,k≤n≤107,5≤p,q,r,MOD≤109) in the first line, denoting the number of contestants, the length of interval, and the parameters k,p,q,r,MOD.
In the next line, there are k integers a1,a2,...,ak(0≤ai≤109), denoting the rating of the first k contestants.
To reduce the large input, we will use the following generator. The numbers p,q,r and MOD are given initially. The values ai(k<i≤n) are then produced as follows :
It is guaranteed that ∑n≤7×107 and ∑k≤2×106.
输出
Since the output file may be very large, let's denote maxratingi and counti as the result of interval [i,i+m−1].
For each test case, you need to print a single line containing two integers A and B, where :
Note that ``⊕'' denotes binary XOR operation.
题目描述
在比赛开始之前,有很多ICPC参赛者排起了长队。它们从左到右标记为1到n。很容易发现第i位参赛者的QodeForces评级为ai。
Quailty师范大学的教练小Q很难看他们排队等候。他开始比较参赛者的评分。他会选择一个长度为m的连续间隔,比如[l,l + m-1],然后从左到右检查每个参赛者。最初,他将记下两个数字maxrating = 0和count = 0。每当他遇到一个比最大值更高等级的参赛者k时,他会将最大值更改为ak并计数到+1。
小 T也是一位等待比赛的教练。他知道小 Q不擅长计算,所以他想知道最大值和计数的正确最终值是多少。请写一个程序来找出答案。
输入
输入的第一行包含整数T(1≤T≤2000),表示测试用例的数量。
在每个测试用例中,第一行有7个整数n,m,k,p,q,r,MOD(1≤m,k≤n≤107,5≤p,q,r,MOD≤109),表示参赛者的数量,间隔的长度,以及参数k,p,q,r,MOD。
在下一行中,有k个整数a1,a2,...,ak(0≤ai≤109),表示前k个参赛者的等级。
为减少大输入,我们将使用以下生成器。最初给出数字p,q,r和MOD。然后如下产生值ai(k <i≤n):
保证Σn≤7×107且Σk≤2×106。
输出
由于输出文件可能非常大,因此我们将maxratingi和counti表示为区间[i,i + m-1]的结果。
对于每个测试用例,您需要打印包含两个整数A和B的单行,其中:
注意,“⊕”表示二进制XOR运算。
样例输入
1
10 6 10 5 5 5 5
3 2 2 1 5 7 6 8 2 9
样例输出
46 11
大致题意(这题需要语文水平:
给你一个长度为n的序列(输入只有前k个元素,k+1至n要根据他给的公式算出)。然后给你一个m,让你求序列中所有长度为m的区间内的最大值和最长上升子序列([1,m],[2,m+1],[3,m+2].......),更换次数为你在这个区间内从左到右遍历寻找最大值的最长上升子序列的长度。
思路:
首先这题的数据范围及最大值,更新次数等关键字眼不难让我们想到单调队列。
但这题正序遍历貌似不太理解,就倒着来进行单调队列,和滑动窗口极其相似。
最大值直接输出对首,最长上升子序列的长度就是单调队列的大小了。
代码:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define inf 0x7fffffff
#define rg register int
using namespace std;
int t,n,m,k,l,r,mod;
long long su,pi,p,q,z;
int a[10000001];
int s[10000001];
int f[10000001];
inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
t=qr();
while(t--){ l=1,r=1;
for(rg i=0;i<=10;++i)
s[i]=-1;
n=qr(),m=qr(),k=qr();
p=qr(),q=qr(),z=qr();
mod=qr(); su=0,pi=0;
for(rg i=1;i<=k;++i)
a[i]=qr();
for(rg i=k+1;i<=n;++i)
a[i]=(p*a[i-1]+q*i+z)%mod;
for(rg i=n;i>=1;--i){
while(s[r]<=a[i]&&r>=l)r--;
s[++r]=a[i];f[r]=i;
while(f[l]>=i+m)l++;
if(i+m<=n+1)
su+=s[l]^i,pi+=(r-l+1)^i;
}printf("%lld %lld\n",su,pi);
}
return 0;
}
Ascending Rating(单调队列)的更多相关文章
- hdu6319 Ascending Rating /// 单调队列
题目大意: 给定n m k,p q r mod, 给出序列的前k项 之后的按公式 a[i]=(p×a[i-1]+q×i+r)%mod 递推 求序列中每个长度为m的连续区间的 该区间最大值与第一位的位置 ...
- HDU 6319 Ascending Rating (单调双端队列)
题意:给定一个序列a[1..n],对于每个长度为m的连续子区间,求出区间的最大值和从左往右扫描该区间最大值的变化次数. 分析:先O(n)处理出整个序列的值.求出每个长度为m的连续区间中的最大值可以用单 ...
- HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...
- HDU 6319 Problem A. Ascending Rating(单调队列)
要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列, ...
- 2018年多校第三场第一题 A. Ascending Rating hdu6319
比赛地址:http://acm.hdu.edu.cn/contests/contest_show.php?cid=804 题目编号:第一题 A. Ascending Rating hdu6319 题 ...
- hdu多校第3场A.Ascending Rating
Problem A. Ascending Rating Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Sub ...
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 单调队列 && 斜率优化dp 专题
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
随机推荐
- Daily Scrum NO.4
工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.解决并录入了一个严重的过滤器BUG,该BUG会导致获取子链接的严重异常. 3.在TFS上进行 ...
- 【Alpha】第一次Scrum Meeting
本次会议内容概括如下: 总结了一周以来大家任务的完成情况,对消耗时间进行统计,并评估了各自对团队的贡献(影响)程度 整理并融合所有人的工作的结果生成了相应的总结性文档 进一步明确了团队中各个成员的定位 ...
- FPGA---Basys3(实验内容汇总贴)
前言 本博文为FPGA---Basys3入门板的实验汇总帖子. 实验指导书 实验源码github地址 实验目录 组合逻辑电路设计 编码器 比较器 全加器 时序逻辑电路设计 D 触发器的实现 同步复位的 ...
- beta圆桌2!
031602111 傅海涛 1.今天进展 文档转换差不多完成 2.存在问题 无 3.明天安排 增加新功能和完善之前的功能 4.心得体会 接口真难 031602115 黄家雄 1.今天进展 考了六级 2 ...
- php代码编写
在php文件里,写入header('content-type:text/html;charset = uft-8');<!-- ============================== -- ...
- Linux命令(十六) 压缩或解压缩文件和目录 zip unzip
目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 zip 是 Linux 系统下广泛使用的压缩程序,文件压缩后扩展名为 ".zip". zip 命令用来将文件 ...
- vue 有关框架
iview-admin https://github.com/iview/iview-admin/ axios https://www.kancloud.cn/yunye/axios/234845
- iOS—— iOS 内存管理:增长+泄漏
1.如果是循环中局部变量data没有释放导致的,给NSData 手动添加释放池 @autoreleasepool { your code } 2.url 转变字典key值的时候出现内存暴增! //设置 ...
- 07.基于IDEA+Spring+Maven搭建测试项目--logback.xml配置
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台日志 ...
- 【刷题】BZOJ 1124 [POI2008]枪战Maf
Description 有n个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人也不同. ...