关于map.size()
  • 板块P1638 逛画展
  • 楼主mot1ve
  • 当前回复14
  • 已保存回复14
  • 发布时间2020/10/5 17:27
  • 上次更新2023/11/5 11:55:40
查看原帖
关于map.size()
250699
mot1ve楼主2020/10/5 17:27

mapp[1]++,mapp[1]--,然后询问mapp.size(),居然输出是1,这个mapp.size()记录的是出现过的不同的数而不是真实存在的不同的数?

#include<bits/stdc++.h>
using namespace std;
int n,m,l,r,ans=0x3f3f3f3f,ansl,ansr;
int a[1000010];
map<int,int> mapp;//记录不同人的画 
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	l=1,r=1,mapp[a[1]]=1;//初始化 
	while(l<=r&&r<=n)
	{
		if(mapp.size()==m)//满足题意了,更新答案,推进左端点 
		{
			if(r-l+1<ans)
			{
				ans=r-l+1;
				ansl=l;
				ansr=r; 
			}
			mapp[a[l]]--;
			l++;
		}
		else//不满足题意,推进右端点 
		{
			r++;
			mapp[a[r]]++;
		}
	}
	cout<<ansl<<" "<<ansr;
	return 0;
}
2020/10/5 17:27
加载中...