D. Find the Different Ones!
核心
设 \(p[i]\) 代表离 \(a[i]\) 左边最近的不同元素的位置
如果 \(p[i]\) 小于 \(l\) 代表区间内元素皆相同
传递规则:
如果 \(a[i-1]!=a[i]\) 那么 \(p[i]=i-1\)
否则 \(a[i]\) 的 \(p\) 就等于 \(a[i-1]\) 的 \(p\)
code
#include<bits/stdc++.h>
using namespace std;
int a[200005]={0};
int p[200005]={0};
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]!=a[i-1])p[i]=i-1;
else p[i]=p[i-1];
}
int m;
cin>>m;
while(m--)
{
int l,r,i;
cin>>l>>r;
if(p[r]<l)puts("-1 -1");
else cout<<p[r]<<" "<<r<<endl;
}
cout<<endl;
}
return 0;
}

浙公网安备 33010602011771号