第一行输入一个整数
代表数组中的元素数量。
第二行输入
个整数
代表初始数组。
第一行输出一个整数
代表满足条件的区间数量。
此后
行,每行输出两个整数
代表满足条件的区间。本题没有
,请按照
递增的顺序输出。
6 1 1 4 5 1 4
3 2 4 3 5 4 6
a = int(input())
b = input().split(' ')
if a != len(b):exit()
# import random
# b = [random.randint(1,999) for _ in range(9999)]
数量 = 0
区间列表 = []
列表 = list()
for 索引,值 in enumerate(b):
if 值 in 列表:
列表 = 列表[列表.index(值)+1:] + [值]
else:
列表.append(值)
if len(列表) > 数量:
数量 = len(列表)
区间列表 = [(索引-len(列表)+2,索引+1)]
elif len(列表) == 数量:
区间列表.append((索引-len(列表)+2,索引+1))
# print(索引,值,列表,数量,区间列表)
print(len(区间列表))
for x,y in 区间列表:
print(fr'{x} {y}')
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>ans;
const int N=2e5+10;
int a[N],cnt[N];
int main(){
int n,ma=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int r=1,l=1;r<=n;r++){
cnt[a[r]]++;
while(cnt[a[r]]>1)cnt[a[l]]--,l++;
if(r-l+1>ma)ans.clear(),ma=r-l+1,ans.push_back(make_pair(l,r));
else if(r-l+1==ma)ans.push_back(make_pair(l,r));
}printf("%d\n",ans.size());
for(auto [l,r]:ans)printf("%d %d\n",l,r);
return 0;
} import java.util.*;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
// 注意 hasNext 和 hasNextLine 的区别
int n = Integer.parseInt(bf.readLine());
int[] chs = Arrays.stream(bf.readLine().split(" ")).mapToInt(
Integer::parseInt).toArray();
Map<Integer,Integer> map=new HashMap<>();
List<int[]> results=new ArrayList<>();
int maxLen=0;
int l=0;
for (int r = 0; r < n; r++) {
//右侧先滑动
map.put(chs[r],map.getOrDefault(chs[r],0)+1);
//右侧元素个数大于1时,左侧收缩
while(map.get(chs[r])>1){
//左侧对应键计数更新
map.put(chs[l],map.get(chs[l])-1);
if(map.get(chs[l])==0){
map.remove(chs[l]);
}
l++;//左侧滑动
}
int cur=r-l+1;
if(cur>maxLen){
maxLen=cur;
results.clear();
results.add(new int[]{l+1,r+1});
}else if(cur==maxLen){
results.add(new int[]{l+1,r+1});
}
}
System.out.println(results.size());
results.forEach(item->System.out.println(item[0]+" "+item[1]));
}
}