社区讨论

关于map.size()

P1638逛画展参与者 5已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@lod6bnw3
此快照首次捕获于
2023/10/31 01:28
2 年前
此快照最后确认于
2023/11/05 11:55
2 年前
查看原帖
mapp[1]++,mapp[1]--,然后询问mapp.size(),居然输出是1,这个mapp.size()记录的是出现过的不同的数而不是真实存在的不同的数?
CPP
#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;
}

回复

14 条回复,欢迎继续交流。

正在加载回复...