【JZOJ4665】数列
description

analysis
水法又\(n\)方二十万……
可以先离散化,然后枚举起点,枚举向下扫
同一个数出现过或模数不相同就\(break\),注意\(k\)不够顶替还是有可能存在解不要退循环
每次一个\(memset\)会\(T\),可以像队列一样维护标记数组,尾进头出,注意和上次答案的重叠部分
正解是单调栈套线段树,但……口胡一下好了
用两个单调栈分别维护最大值最小值的位置,然后线段树上二分,直接用单调栈判断
时间做到\(O(n\log_2n)\) 没时间打所以鸽了
code
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 200005
#define fo(i,a,b) for (int i=a;i<=b;++i)
#define fd(i,a,b) for (int i=a;i>=b;--i)
using namespace std;
bool bz[MAXN];
int n,k,d,tot,mxx,pos,last;
struct node
{
	int x,y,id;
}a[MAXN];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
	while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
	return x*f;
}
inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
inline bool cmp1(node a,node b){return a.x<b.x;}
inline bool cmp2(node a,node b){return a.id<b.id;}
int main()
{
	freopen("T3.in","r",stdin);
	n=read(),k=read(),d=read();
	fo(i,1,n)a[i].x=read(),a[i].id=i;
	sort(a+1,a+n+1,cmp1);
	int i=1;while (i<=n)
	{
		a[i].y=++tot;
		int j=i;while (j<n && a[j+1].x==a[i].x)a[++j].y=tot;
		i=j+1;
	}
	sort(a+1,a+n+1,cmp2);
	mxx=pos=1;
	fo(i,1,n-mxx)
	{
		bz[a[i].y]=1;
		int tmp=i,mx=a[i].x,mn=a[i].x;
		fo(j,i+1,n)
		{
			if ((bz[a[j].y] && j>last) || (a[j].x%d)!=(a[i].x%d))
			{
				last=j-1;break;
			}
			bz[a[j].y]=1;
			mx=max(mx,a[j].x),mn=min(mn,a[j].x);
			if ((mx-mn)/d<=j-i+k)tmp=j;
		}
		if (tmp-i+1>mxx)pos=i,mxx=tmp-i+1;
		bz[a[i].y]=0;
	}
	printf("%d %d\n",pos,pos+mxx-1);
	return 0;
}
												
											【JZOJ4665】数列的更多相关文章
- [JZOJ4665] 【GDOI2017模拟7.21】数列
		
题目 题目大意 给你一个数列,让你找到一个最长的连续子序列,满足在添加了至多KKK个数之后,能够变成一条公差为DDD的等差数列. 思考历程 一眼看上去似乎是一道神题-- 没有怎么花时间思考,毕竟时间都 ...
 - C#求斐波那契数列第30项的值(递归和非递归)
		
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 - BZOJ1500[NOI2005]维修数列
		
Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一 ...
 - PAT 1049. 数列的片段和(20)
		
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1 ...
 - 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
		
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
 - fibonacci数列(五种)
		
自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...
 - js中的斐波那契数列法
		
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
 - 洛谷 P1182 数列分段Section II Label:贪心
		
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
 - 剑指Offer面试题:8.斐波那契数列
		
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
 
随机推荐
- JS变量1
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 在IDEA中用Gradle构建项目时使用lombok以依赖出现出错
			
情景: 之情一直是使用Maven构建的项目并且导入依赖后都可以正常使用,但是在换成Gradle时出现了不论使用什么版本的lombok的依赖都会提示@Sl4j注解的log找不到,但是编辑界面是不会报错的 ...
 - Ubuntu16.04 使用PPA安装JDK8
			
安装Java 8 ( 支持 Ubuntu 10.04 - Ubuntu 16.04 ) 1.如果你在 Ubuntu 软件中心安装过 OpenJDK,请先使用如下命令将其删除: sudo apt-get ...
 - git删除远程服务的文件夹
			
首先查看当前分支:git branch -a 删除缓存的idea:git rm --cached -r .idea 提交gitiginore文件,将.idea从源代码仓库中删除(-m 表示注解): ...
 - 搜索进阶课件,视频,代码(状态压缩搜索,折半搜索,dfs,bfs总结)
			
链接:https://pan.baidu.com/s/1-svffrprCOO4CtQoCTQ9hQ 提取码:h909 复制这段内容后打开百度网盘手机App,操作更方便哦
 - PHPExcel导出数据量过大处理
			
今天使用PHPExce插件导不出数据,发现是数据量过大的原因,这里只做简单的处理. 1.导出超时处理:在执行页面添加:set_time_limit(0); 2.内存溢出:在执行页面添加:ini_set ...
 - Android 防止切换横屏闪退
			
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
 - delphi xe10 网络连接
			
//当前网络状态(引用 Androidapi.JNI.Network.pas) IsConnected //连接 IsWiFiConnected //Wifi是否连接 IsMobileConnecte ...
 - CSS四种定位及应用
			
定位(position) 如果,说浮动, 关键在一个 “浮” 字上面, 那么 我们的定位,关键在于一个 “位” 上. PS: 定位是我们CSS算是数一数二难点的了,但是,你务必要学好它,我们CSS离不 ...
 - USACO 06JAN 牛的舞会  洛谷2863
			
题目描述 The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in their ...