2 solutions

  • 1
    @ 2025-12-30 9:58:55
    #include<bits/stdc++.h>
    using namespace std;
    const int N=3e5+10;
    int a[N];
    map<int,int> h; 
    int main()
    {
    	int n,k;
    	cin>>n>>k;
    	int ans=0,cnt=0;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	for(int i=1;i<=n;i++)
    	{
    		h[a[i]]++; //累加当前出现的数字的次数 
    		if(h[a[i]]==1) cnt++; //第一次出现 
    		int l=i-k; //计算应该出界的位置 
    		if(l>0) //出界的位置合法 
    		{
    			h[a[l]]--;
    			if(h[a[l]]==0) cnt--; //出界元素少了一个 
    		}
    		ans=max(ans,cnt); //更新答案 
    		//cout<<i<<" "<<l<<" "<<cnt<<" "<<h[a[i]]<<endl;
    	}
    	cout<<ans;
        return 0;
    }
    
    • 0
      @ 2026-10-3 10:07:41
      #include<bits/stdc++.h>
      using namespace std;
      int a[300005];
      map<int,int> m;
      int main()
      {
      	int n,k;cin>>n>>k;
      	int ans=0,sum=0;
      	for(int i=1;i<=n;i++) cin>>a[i];
      	for(int i=1;i<=n;i++) {
      		m[a[i]]++;
      		if(m[a[i]]==1) sum++;
      		int l=i-k;
      		if(l>0){
      			m[a[l]]--;
      			if(m[a[l]]==0) sum--;
      		}
      		ans=max(ans,sum);
      	}
      	cout<<ans;
      	return 0;
      }
      
      • 1

      Information

      ID
      2732
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      20
      Accepted
      9
      Uploaded By