标签:nbsp 双指针 sig code alt 最大 als int bsp
5
1 2 3 2 1
3
n≤1e6,xi≤1e9
【题解】
这个题目其实用的是一种的hash方式,其实就是我们常用的离散化操作。
1、另外一个数组存放相同数据,然后进行排序。
2、因为大小相同可以看成一个数,所以相同的话,可以用lower_bound来写,因为是大于等于某个数,等于可以看成对应的大小关系。
3、然后进行双指针方法来跑最大区间的不同种类的个数。
【代码】
1 #include<cstdio> 2 #include<bitset> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 typedef unsigned long long ULL ; 7 const int N = 1e6+10; 8 const int M = 5e6+10; 9 const ULL base = 131; 10 int a[N],c[N],H[M],n; 11 ULL b[N]; 12 void Dispersed(){ 13 sort( b + 1 , b + 1 + n ); 14 for(int i=1;i<=n;i++){ 15 c[i] = lower_bound(b+1,b+1+n,a[i]) - (b+1); 16 } 17 } 18 int main() 19 { 20 ios_base :: sync_with_stdio(false); 21 cin.tie(NULL) , cout.tie(NULL) ; 22 23 cin >> n ; 24 for(int i=1;i<=n;i++) cin >> a[i] ,b[i] = a[i]; 25 Dispersed(); 26 27 int res = 0 ; 28 for(int i=1,j=1;j<=n;j++){ 29 H[ c[j] ] ++ ; 30 while( H[c[j]] > 1 ) H[ c[i++] ] --; 31 res = max( res , j-i+1) ; 32 } 33 printf("%d\n",res ); 34 return 0; 35 }
标签:nbsp 双指针 sig code alt 最大 als int bsp
原文地址:https://www.cnblogs.com/Osea/p/11333474.html