• 【JZOJ4665】数列


    description


    analysis

    • 水法又(n)方二十万……

    • 可以先离散化,然后枚举起点,枚举向下扫

    • 同一个数出现过或模数不相同就(break),注意(k)不够顶替还是有可能存在解不要退循环

    • 每次一个(memset)(T),可以像队列一样维护标记数组,尾进头出,注意和上次答案的重叠部分

    • 正解是单调栈套线段树,但……口胡一下好了

    • 用两个单调栈分别维护最大值最小值的位置,然后线段树上二分,直接用单调栈判断

    • 时间做到(O(nlog_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
    ",pos,pos+mxx-1);
    	return 0;
    }
    
  • 相关阅读:
    【Beta】Scrum Meeting 8
    【Beta】Scrum Meeting 7
    【Beta】Scrum Meeting 6
    【Beta】Scrum Meeting 5
    【Beta】Scrum Meeting 4
    【Beta】Scrum Meeting 3
    “北航Clubs”项目汇报
    Alpha阶段展示报告
    Alpha阶段产品功能说明
    Alpha阶段个人贡献分
  • 原文地址:https://www.cnblogs.com/horizonwd/p/11128413.html
Copyright © 2020-2023  润新知