首页 > 其他分享 >蒲公英(还没做出来)

蒲公英(还没做出来)

时间:2024-04-30 21:33:49浏览次数:14  
标签:int 出来 ll 样例 60000 蒲公英 询问

题目描述
亲爱的哥哥:

你在那个城市里面过得好吗?

我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我觉得把那么可怕的怪物召唤出来的那个坏蛋也很坏呢。不过奶奶说他是很难受的时候才做出这样的事的……

最近村子里长出了一大片一大片的蒲公英。一刮风,这些蒲公英就能飘到好远的地方了呢。我觉得要是它们能飘到那个城市里面,让哥哥看看就好了呢!

哥哥你要快点回来哦!

爱你的妹妹 Violet

Azure 读完这封信之后微笑了一下。

“蒲公英吗……”

在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。

为了简化起见,我们把所有的蒲公英看成一个长度为 n 的序列 (),其中 为一个正整数,表示第 i 棵蒲公英的种类编号。

而每次询问一个区间[l, r],你需要回答区间里出现次数最多的是哪种蒲公英,如果有若干种蒲公英出现次数相同,则输出种类编号最小的那个。

注意,你的算法必须是在线的。

输入格式
第一行两个整数 n, m,表示有 n 株蒲公英,m 次询问。

接下来一行 n 个空格分隔的整数 ,表示蒲公英的种类。

再接下来 m 行每行两个整数 ,我们令上次询问的结果为 x(如果这是第一次询问,则 x = 0)。

令 ,如果 l > r,则交换 l, r。

最终的询问区间为[l, r]。

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

样例
样例输入
6 3
1 2 3 2 1 2
1 5
3 6
1 5
样例输出
1
2
1

目前是T的

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
map<int,int> push;
map<int,int> back;
int n,m;
int len;
int from,to;
ll t[60000];
ll a[60000];
int f[500][60000];
int l[60000],r[60000];
int vis[60000];
ll num[60000];
void div(){
	int sq=sqrt(n);
	for(int i=1;i<=sq;i++){
		l[i]=sq*(i-1)+1;
		r[i]=sq*i;
	}
	if(r[sq]<n){
		sq++;
		l[sq]=r[sq-1]+1;
		r[sq]=n;
	}
	for(int i=1;i<=sq;i++){
		for(int j=l[i];j<=r[i];j++){
			vis[j]=i;
			f[i][push[a[j]]]++;
		}
	}
}
int check(int x,int y){
	memset(num,0,sizeof(num));
	int ans=0;ll last=0x7ffffffff;
	int p=vis[x],q=vis[y];
	if(p==q){
		for(int i=x;i<=y;i++){
			num[push[a[i]]]++;
		}
		for(int i=x;i<=y;i++){
			if((ans<num[push[a[i]]])||(ans==num[push[a[i]]]&&last>a[i])){
				ans=num[push[a[i]]];
				last=a[i];
			}
		}
	}
	else{
		for(int i=x;i<=r[p];i++){
			num[push[a[i]]]++;
		}
		for(int i=p+1;i<q;i++){
			for(int j=1;j<=len;j++){
				num[j]+=f[i][j];
			}
		}
		for(int i=l[q];i<=y;i++){
			num[push[a[i]]]++;
		}
		for(int i=1;i<=len;i++){
			if((ans<num[i])||(ans==num[i]&&last>back[i])){
				ans=num[i];
				last=back[i];
			}
		}
	}
	return last;
}
int main(){
	int x=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];t[i]=a[i];
	}
	sort(t+1,t+1+n);
	len=unique(t+1,t+1+n)-t-1;
	for(int i=1;i<=len;i++){
		push[t[i]]=i;
		back[i]=t[i];
	}
	div();
	for(int i=1;i<=m;i++){
		cin>>from>>to;
		from=(from+x-1)%n+1;
		to=(to+x-1)%n+1; 
		if(from>to) swap(from,to);
		cout<<check(from,to)<<endl; 
		x=check(from,to);
	}
}
注意时间

image

标签:int,出来,ll,样例,60000,蒲公英,询问
From: https://www.cnblogs.com/PeppaEvenPigShiGeNiuBDePig/p/18152312

相关文章

  • Qt QSettings读写ini时 General 读不出来值
    简述我有一个配置文件,其中一个组General,怎么都读不出正确的值,全是空,但是别的组能读出来,改General2试试,果然可以,就怀疑是不是组名称被内置了。打开QSettings的帮助文档,搜索General,有内容,看下解释TheINIfileformathassevererestrictionsonthesyntaxofakey.Qt......
  • 蒲公英
    [Violet]蒲公英题目背景亲爱的哥哥:你在那个城市里面过得好吗?我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我觉得把那么可怕的怪物召唤出来的那个坏蛋也很坏呢。不过奶奶说他是很难受......
  • P4168 [Violet] 蒲公英 (莫队的强制在线)
    前言当个乐子看就行所用时间不如分块正解快虽然在线莫队实质也是分块[Violet]蒲公英题目背景亲爱的哥哥:你在那个城市里面过得好吗?我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我......
  • P4168 [Violet] 蒲公英(题解)
    题目题目描述输入格式输出格式数据范围![]样例输入:63123212153615输出:121思路暴力本题求区间内的最小众数,容易想到去用数组sum[i]表示第i种花的个数,在去便利比较,但是复杂度nm一定会T,这时候就要对暴力进行优化。分块优化1如果我们将所......
  • 蒲公英(分块)
    [Violet]蒲公英题目背景亲爱的哥哥:你在那个城市里面过得好吗?我在家里面最近很开心呢。昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了。我觉得把那么可怕的怪物召唤出来的那个坏蛋也很坏呢。不过奶奶说他是很难受......
  • JAVA各种系统架构图,终于有人把Java程序员必学知识点全整理出来了
    JAVA各种系统架构图,终于有人把Java程序员必学知识点全整理出来了1.spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring框架的功能......
  • oc渲染预览出来是白色怎么解决?云渲染解决oc渲染慢
    许多初学者在使用OC渲染器进行三维图像渲染时,经常会遇到一个常见问题:预览图像显示正常,但最终渲染完成的作品却出现整体亮度过高,即泛白现象。针对这一问题,本文将提供专业的解决方案,并探讨如何利用云渲染技术来提升OC渲染器的处理速度,帮助用户克服渲染过程中的挑战,确保最终输出的图......
  • 一个PDF文件含有多篇不同的内容,如何把这些内容分离出来?
    一,PDF的含义PDF,全称PortableDocumentFormat,即便携式文档格式,是一种由AdobeSystems开发的文件格式,用于呈现文档,包括文本、图像、向量图形、字体、颜色、页面布局等,并可在不同的操作系统、设备和软件平台上进行查看和打印。PDF文件的设计初衷是为了解决不同操作系统和应用程......
  • 16:00面试,16:06就出来了,问的问题有点变态。。。
    从上一家出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到3月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一......
  • Java对象是如何创建出来的?
    创建一个Java对象还不简单?new一下就出来了:Objectobj=newObject();不过,我相信,读者既然进来阅读这篇文章,想必是不满足于仅仅掌握创建Java对象的基本语法,而是要知其然也要知其所以然。下面,让我们一起来看看,对象是怎么创建出来的: 1、JVM进行类加载检查当Java虚拟机(JVM)执行new......