hdu 6319 逆序建单调队列
题目传送门//res tp hdu
维护递增单调队列
根据数据范围推测应为O(n)的.
我们需要维护一个区间的信息,区间内信息是“有序”的,同时需要在O(1)的时间进行相邻区间的信息转移.
若是主数列从头到尾转移无法有解题突破口,就反过来从尾到头再思考.
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i = (a);i>=(b);--i)
#define fo(i,a,b) for(int i =(a);i<(b);++i)
#define de(x) cout<<#x<<" = "<<x<<endl;
#define endl '\n'
#define ls(p) ((p)<<1)
#define rs(p) (((p)<<1)|1)
using namespace std;
typedef long long ll;
const int mn = 1e7+10;
int T;
ll a[mn];
ll n,m,k,p,q,r,MOD;
int L,R;
int tmaxr;
ll A,B;
ll val[mn];
int pos[mn];
int main(){
	scanf("%d",&T);
	while(T--){
		A = B = 0;
		scanf("%lld %lld %lld %lld %lld %lld %lld",&n,&m,&k,&p,&q,&r,&MOD);
		rep(i,1,k)	scanf("%lld",&a[i]);
		if(k<n)
		rep(i,k+1,n) a[i] = (p*a[i-1]+q*i+r)%MOD;
		L = R = n-m+1;
		val[L] = a[L]; pos[L] = L;
		tmaxr = a[L];
		int tem = n-m+2;
		rep(i,tem,n) if(a[i] > tmaxr){
			++R;
			val[R] = a[i]; pos[R]=i;
			tmaxr = a[i];
		}
		A += L^tmaxr;
		B += L^(R-L+1);
		tem-=2;
		per(i,tem,1){
			while(L<=R&&pos[R] > i + m - 1){
					R--;
			}
			if(a[i] >= a[i+1]){
				while(L<=R&&val[L] <= a[i]){
					L++;
				}
			}
			L--;
			val[L]=a[i];pos[L]=i;
			A += val[R]^i;
			B += (R - L + 1)^i;
		}
		printf("%lld %lld\n",A,B);
	}
}
												
											hdu 6319 逆序建单调队列的更多相关文章
- hdu 5945 Fxx and game(单调队列优化DP)
		
题目链接:hdu 5945 Fxx and game 题意: 让你从x走到1的位置,问你最小的步数,给你两种走的方式,1.如果k整除x,那么你可以从x走一步到k.2.你可以从x走到j,j+t<= ...
 - hdu 3410 Passing the Message(单调队列)
		
题目链接:hdu 3410 Passing the Message 题意: 说那么多,其实就是对于每个a[i],让你找他的从左边(右边)开始找a[j]<a[i]并且a[j]=max(a[j])( ...
 - Counter Strike  HDU 2443  逆序对数
		
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2443 这个题目尝试了很多种方法都过不去,上网查了一下网友们的的思路,竟然和逆序对数有关系!! 题目大意: ...
 - CH1201 最大子序和 (单调队列)
		
题目链接: AcWing 牛客 题目描述 输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当 ...
 - HDU - 5289 Assignment (RMQ+二分)(单调队列)
		
题目链接: Assignment 题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...
 - HDU 2490 Parade(DPの单调队列)(2008 Asia Regional Beijing)
		
Description Panagola, The Lord of city F likes to parade very much. He always inspects his city in h ...
 - HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)
		
Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...
 - HDU 6047 Maximum Sequence (贪心+单调队列)
		
题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...
 - CH 1201 - 最大子序和 - [单调队列]
		
题目链接:传送门 描述输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 $1,-3,5,1,-2,3$. 当 $m=4$ 时,$S=5+1-2+3=7$:当 ...
 
随机推荐
- W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8CF63AD3F06FC659
			
报错信息: W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be ...
 - Ubuntu14.04 打开关闭图形桌面
			
使用 Ctrl+Alt+t 打开命令行界面 #关闭桌面 sudo service lightdm stop #恢复桌面 sudo service lightdm start Ctrl+Alt+F1 可 ...
 - Editor
			
E. Editor 我们把"("用1表示,")"用-1表示,其余字母用0表示,这样形成的一个数组,我们求出它的前缀和sum[],只有当\(sum[n]==0\) ...
 - Exception in thread "main" java.util.ConcurrentModificationException解决方案
			
我想判断一个集合里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素, 当时的做法是: public class ListIterator ...
 - RAFT选举算法-分布式数据库困惑
			
在做HIS研发工作的时候一直想完善其数据组件,想做一个分布式的数据库支持系统.但一直以来都不清楚这个选举算法应怎么做,原来有一个叫raft的算法https://www.cnblogs.com/just ...
 - Mybatis generator配置
			
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...
 - 彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)
			
为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也 ...
 - cmder的segmentation fault错误修复
			
Segmentation fault 现场还原 问题出现的原因是我在 cmder的命令行里执行了cmder /register ALL命令,本意是把cmder放到右键菜单里去的 但我没想到的是,各种不 ...
 - [SQL]as的是否可以省略的问题
			
数据库中as主要作用是起别名,常规来说都可以省略,但是为了增加可读性,不建议省略.
 - java.util.concurrent.DelayQueue 源码学习
			
jdk1.8 DelayQueue,带有延迟元素的线程安全队列,当非阻塞从队列中获取元素时,返回最早达到延迟时间的元素,或空(没有元素达到延迟时间).DelayQueue的泛型参数需要实现Delaye ...