我用的贪心,简述就是尽量把所有重复出现过至少两次的数字包含在 [l,r] 里。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,n,a[N],b[N];
bool same[N];
void init()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(same,0,sizeof(same));
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
int bn=-1;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[a[i]]++;
if(a[i]>bn) bn=a[i];
}
for(int i=1;i<=bn;i++)
{
if(b[i]>1) same[i]=true;
}
int l=1,r=n;
bool lstop=false,rstop=false;
while(l<r)
{
if(lstop && rstop) break;
if(same[a[l]])
{
lstop=true;
}
if(same[a[r]])
{
rstop=true;
}
if(!lstop) l++;
if(!rstop) r--;
}
cout<<l<<' '<<r<<endl;
}
return 0;
}