• LuoguP3709 大爷的字符串题


    题面


    分析

    垃圾题面。

    考虑一下题目的意思,既然S中只要有大于等于x的元素就要减RP,那我们就从小到大取就可以避免这个问题了。如果采取这种策略,不难看出只有相同的元素才会对答案做贡献,也就是说,答案等于出现次数最多的数的出现次数。于是,本题转化为求区间众数。

    注意区间端点取值范围较大,需要离散化。

    代码

    /*
    By Nero Claudius Caeser Augustus Germanicus,
    Imperatorum Romanorum.
    */
    #include <bits/stdc++.h>
    
    using namespace std;
    
    namespace StandardIO{
    
    	template<typename T>void read(T &x){
    		x=0;T f=1;char c=getchar();
    		for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=-1;
    		for(; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
    		x*=f;
    	}
    
    	template<typename T>void write(T x){
    		if(x<0) putchar('-'),x*=-1;
    		if(x>=10) write(x/10);
    		putchar(x%10+'0');
    	}
    
    } using namespace StandardIO;
    
    namespace Project{
    	
    	const int N=200000+100;
    	
    	int n,m,block;
    	int len,rr[N],a[N];
    	struct node{
    		int l,r,id;
    	} ask[N];
    	int l,r,res,ans[N],cnt[N],tim[N];
    	
    	bool cmp(const node x,const node y){
    		return (x.l/block!=y.l/block)?(x.l/block<y.l/block):(((x.l/block)&1)?(x.r<y.r):(x.r>y.r));
    	}
    	void add(int x){
    		x=a[x];
    		if(res==cnt[x]) ++res;
    		--tim[cnt[x]],++cnt[x],++tim[cnt[x]];
    	}
    	void del(int x){
    		x=a[x];
    		if(tim[cnt[x]]==1&&res==cnt[x]) --res;
    		--tim[cnt[x]],--cnt[x],++tim[cnt[x]];
    	}
    	
    	void MAIN(){
    		read(n),read(m),block=sqrt(m);
    		for(int i=1; i<=n; ++i){
    			read(rr[i]),a[i]=rr[i];
    		}
    		sort(rr+1,rr+n+1),len=unique(rr+1,rr+n+1)-rr-1;
    		for(int i=1; i<=n; ++i){
    			a[i]=lower_bound(rr+1,rr+len+1,a[i])-rr;
    		}
    		for(int i=1; i<=m; ++i){
    			read(ask[i].l),read(ask[i].r),ask[i].id=i;
    		}
    		sort(ask+1,ask+m+1,cmp);
    		l=1,r=0;
    		for(int i=1; i<=m; ++i){
    			while(r<ask[i].r) add(++r);
    			while(r>ask[i].r) del(r--); 
    			while(l<ask[i].l) del(l++);
    			while(l>ask[i].l) add(--l);
    			ans[ask[i].id]=res;
    		}
    		for(int i=1; i<=m; ++i){
    			write(-ans[i]),puts("");
    		}
    	}
    	
    }
    
    int main(){ 
    //	freopen("P3709_2.in","r",stdin);
    //	freopen("ans.out","w",stdout);
    	Project::MAIN();
    }
    
  • 相关阅读:
    人肉搜索利大于弊?
    上海美容美发连锁店疯狂扩展,大面值会员卡慎办
    jQuery简单入门
    把苦难装在心里《赢在中国》(20080527)
    赢在中国(080304)
    ASP.NET MVC Preview 2新特性
    Lucifer的一场暴强围英雄表演
    php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
    PHP开发绝对不能违背的安全铁则(摘)
    MySQL数据类型:UNSIGNED注意事项
  • 原文地址:https://www.cnblogs.com/ilverene/p/13334018.html
Copyright © 2020-2023  润新知