zoukankan      html  css  js  c++  java
  • 蒲公英 P5022

    Description

    在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。 为了简化起见,我们把所有的蒲公英看成一个长度为n的序列(a1,a2,a3,4,...an) ,其中ai 为一个正整数,表示第i棵蒲公英的种类编号。 而每次询问一个区间[L,R],你需要回答区间里出现次数最多的是哪种蒲公英,如果有若干种蒲公英出现次数相同,则输出种类编号最小的那个。 注意,你的算法必须是在线的。


    Input

    第一行两个整数n,m,表示有n株蒲公英,m次询问。接下来一行n个空格分隔的整数ai ,表示蒲公英的种类 再接下来m行每行两个整数Li,Ri ,我们令上次询问的结果为x(如果这是第一次询问,则 x=0)。 令L=(Li+x-1)mod n+1,R=(Ri+x-1)mod n+1,如果L>R ,则交换L,R 。 最终的询问区间为[L,R]。


    Output

    输出m 行。每行一个整数,表示每次询问的结果。


    Hint

    对于 20% 的数据,保证 1<= m,n<=3000 。 对于 100% 的数据,保证 1<=n<=40000 , 1<=m<=50000, 1<=ai<=10^9


    Solution

    O2做法,直接离散化+暴力。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #define maxn 50005
    using namespace std;
    int a[maxn],b[maxn],cnt[maxn];
    int n,lenOfa,LL,RR,L,R,x,m,ans,num;
    void lsh(){
    	sort(b+1,b+n+1);
        lenOfa=unique(b+1,b+n+1)-b-1;
        for(int i=1;i<=n;i++){
        	a[i]=lower_bound(b+1,b+lenOfa+1,a[i])-b;
        }
    }
    void init(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&a[i]);
    		b[i]=a[i];
    	}
    }
    int main(){
    	init();
    	lsh();
    	for(int i=1;i<=m;i++){
    		ans=0;
    		memset(cnt,0,sizeof(cnt));
    		scanf("%d%d",&L,&R);
    		LL=(L+x-1)%n+1;
    		RR=(R+x-1)%n+1;
    		if(LL>RR)swap(LL,RR);
    		for(int j=LL;j<=RR;j++){
    			cnt[a[j]]++;
    		}
    		for(int j=1;j<=lenOfa;j++){
    			if(ans<cnt[j]){
    				ans=cnt[j];
    				num=j;
    			}
    		}
    		x=b[num];
    		printf("%d
    ",x);
    	}
    	return 0;
    }
    
  • 相关阅读:
    HTML5 浏览器设定
    c语言运算符优先级
    Jquery选择器
    asp.net中的<% %>用法
    Jquery技巧
    css选择器
    HTML5 Canvas 参考手册
    具有滑动效果的导航代码
    委托
    kubernetes 1.6 集群实践 (十)
  • 原文地址:https://www.cnblogs.com/virtual-north-Illya/p/10103835.html
Copyright © 2011-2022 走看看