63分求助

P1638 逛画展

@[Maysoul](/user/409774) ``` //2023/9/5 //别着急,先通读一遍题目 //别忘了开long long //写完先看一遍怎么降复杂度 //要么开全局变量要么给定初值 //想想看,有什么情况需要特判 //看看数组开的够不够大 //std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); #include<bits/stdc++.h> using namespace std; const int MAXN=1e6+10; int num,ans; int a[MAXN],vis[MAXN]; queue<int> que; int main() { int n,m,u,v; cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i]; int r=1,l=1; while(num<m){ if(vis[a[r]]==0) num++; vis[a[r]]++; que.push(r); r++; } ans=r-1; v=ans; u=que.front(); while(que.size()&&vis[a[que.front()]]>1){ vis[a[que.front()]]--; que.pop(); ans--; u=que.front(); } int res=ans; for (int i=r;i<=n;i++){ que.push(i); vis[a[i]]++; res++; while(que.size()&&vis[a[que.front()]]>1){ //cout<<"ssdas"<<endl; vis[a[que.front()]]--; que.pop(); res--; if(res<ans){ u=que.front(); v=i; ans=res; } } } cout<<u<<" "<<v<<endl; return 0; } ```
by bzzltl @ 2023-09-06 17:08:47


@[Maysoul](/user/409774) 你这个 ``` if(res<ans){ u=que.front(); v=i; } ``` 你比较完大小之后为什么不更新`ans`啊
by bzzltl @ 2023-09-06 17:09:40


|