zoukankan      html  css  js  c++  java
  • CF1514D Cut and Stick

    CF1514D Cut and Stick

    找一下规律会发现答案就是 (1) 或者 (2x-(r-l+1))

    然后问题转化成为求区间众数个数。

    可以直接用 P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III 在线做或者用莫队离线做。

    然后就没有了。

    代码:

    #pragma GCC optimize(2)
    %:pragma GCC optimize(3)
    %:pragma GCC optimize("Ofast")
    %:pragma GCC optimize("inline")
    %:pragma GCC optimize("-fgcse")
    %:pragma GCC optimize("-fgcse-lm")
    %:pragma GCC optimize("-fipa-sra")
    %:pragma GCC optimize("-ftree-pre")
    %:pragma GCC optimize("-ftree-vrp")
    %:pragma GCC optimize("-fpeephole2")
    %:pragma GCC optimize("-ffast-math")
    %:pragma GCC optimize("-fsched-spec")
    %:pragma GCC optimize("unroll-loops")
    %:pragma GCC optimize("-falign-jumps")
    %:pragma GCC optimize("-falign-loops")
    %:pragma GCC optimize("-falign-labels")
    %:pragma GCC optimize("-fdevirtualize")
    %:pragma GCC optimize("-fcaller-saves")
    %:pragma GCC optimize("-fcrossjumping")
    %:pragma GCC optimize("-fthread-jumps")
    %:pragma GCC optimize("-funroll-loops")
    %:pragma GCC optimize("-fwhole-program")
    %:pragma GCC optimize("-freorder-blocks")
    %:pragma GCC optimize("-fschedule-insns")
    %:pragma GCC optimize("inline-functions")
    %:pragma GCC optimize("-ftree-tail-merge")
    %:pragma GCC optimize("-fschedule-insns2")
    %:pragma GCC optimize("-fstrict-aliasing")
    %:pragma GCC optimize("-fstrict-overflow")
    %:pragma GCC optimize("-falign-functions")
    %:pragma GCC optimize("-fcse-skip-blocks")
    %:pragma GCC optimize("-fcse-follow-jumps")
    %:pragma GCC optimize("-fsched-interblock")
    %:pragma GCC optimize("-fpartial-inlining")
    %:pragma GCC optimize("no-stack-protector")
    %:pragma GCC optimize("-freorder-functions")
    %:pragma GCC optimize("-findirect-inlining")
    %:pragma GCC optimize("-fhoist-adjacent-loads")
    %:pragma GCC optimize("-frerun-cse-after-loop")
    %:pragma GCC optimize("inline-small-functions")
    %:pragma GCC optimize("-finline-small-functions")
    %:pragma GCC optimize("-ftree-switch-conversion")
    %:pragma GCC optimize("-foptimize-sibling-calls")
    %:pragma GCC optimize("-fexpensive-optimizations")
    %:pragma GCC optimize("-funsafe-loop-optimizations")
    %:pragma GCC optimize("inline-functions-called-once")
    %:pragma GCC optimize("-fdelete-null-pointer-checks")
    
    #include<bits/stdc++.h>
    using namespace std;
    const int N=3e5+5,siz=708;
    #define inf 0x3f3f3f3f
    #define ll long long
    #define ull unsigned long long
    #define lowbit(x) (x&(-x))
    inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}
    inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}
    #define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
    char buf[1<<21],*p1=buf,*p2=buf;
    inline int read(){int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
    template <typename T>
    inline void write(T x){
    	if(x<0) putchar('-'),x=-x;
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    std::vector<int>ls,v[N];
    int n,m,L[710],R[710],bel[N],blocks,mx[710][710],ans,tot[N],wz[N],a[N];
    void init(){
    	blocks=(n-1)/siz+1;
    	for(int i=1;i<=blocks;++i)L[i]=R[i-1]+1,R[i]=i*siz;
    	R[blocks]=n;
    	for(int i=1;i<=blocks;++i){
    		memset(tot,0,sizeof tot);
    		for(int j=L[i];j<=R[i];++j)bel[j]=i;
    		for(int j=i;j<=blocks;++j){
    			int&F=mx[i][j];
    			F=mx[i][j-1];
    			for(int k=L[j];k<=R[j];++k)
    			F=std::max(F,++tot[a[k]]);
    		}
    	}
    }
    int main(){
    	ls.push_back(-1);
    	n=read(),m=read();
    	for(int i=1;i<=n;ls.push_back(a[i++])) a[i]=read();
    	std::sort(ls.begin(),ls.end());
    	ls.erase(std::unique(ls.begin(),ls.end()),ls.end());
    	for(int i=1;i<=n;++i)v[a[i]=std::lower_bound(ls.begin(),ls.end(),a[i])-ls.begin()].push_back(i),wz[i]=v[a[i]].size()-1;
    	init();
    	memset(tot,0,sizeof tot);
    	while(m--){
    		int l,r;l=read(),r=read();
    		ans=0;
    		if(bel[l]==bel[r]){
    			for(int i=l;i<=r;++i)ans=std::max(ans,++tot[a[i]]);
    			for(int i=l;i<=r;++i)tot[a[i]]=0;
    		}else{
    			ans=mx[bel[l]+1][bel[r]-1];
    			for(int i=l;i<=R[bel[l]];++i){
    				int it=wz[i];
    				while(it+ans<v[a[i]].size()&&v[a[i]][it+ans]<=r)++ans;
    			}
    			for(int i=L[bel[r]];i<=r;++i){
    				int it=wz[i];
    				while(it-ans>=0&&v[a[i]][it-ans]>=l)++ans;
    			}
    		}
    		if(ans<=ceil((1.0*r-l+1)/2)) write(1);
            else write(2*ans-(r-l+1));
            puts("");
    	}
    	return 0;
    }
    
  • 相关阅读:
    关于ActionScript中那些你不知道的事情
    Flash Player 11 Stage3D学习大杂烩
    Qt 控制台输入输出(支持中文)
    Redis消息发布订阅的稳定性验证结论
    C++11 Lambda表达式(匿名函数)用法详解
    vue中“:”、“.”、“@”意义
    QT中printf输出不同步的解决办法
    QT5中使用SQLite
    QT 调用user32.dll移动鼠标
    10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)
  • 原文地址:https://www.cnblogs.com/Akmaey/p/14686639.html
Copyright © 2011-2022 走看看