题目描述:
输入描述:
输出描述:
样例:
解释:
题意:如果i < j && ai > aj,那么i,j相连,(相连的是同一种颜色),先给定数组,问一共有几种颜色
思路: 先处理出一个最大值数组,然后从后往前遍历数组,看大于等于这个数的第一个最大值的位置,知道遍历到最大值是的时候,看看下标是否对应即可
#include<bits/stdc++.h>
using namespace std;
int arr[100005];
vector<int> ve;
int main(){
ios::sync_with_stdio(false);
int t;
int n;
cin >> t;
while(t--){
cin >> n;
ve.clear();
for(int i = 0; i < n; i++){
cin >> arr[i];
}
int maxn = 0;
for(int i = 0; i < n; i++){
if(maxn < arr[i]){
maxn = arr[i];
ve.push_back(maxn);
}
}
int ans = 0;
int cnt = ve.size() - 1;
bool f = 0;
int minn = 100000000;
for(int i = n - 1; i >= 0; i--){
int a = lower_bound(ve.begin(), ve.end(), arr[i]) - ve.begin();
minn = min(a, minn);
if(minn < cnt){
f = 1;
}
if(arr[i] == ve[cnt]){
if(f == 0){
ans++;
}
f = 0;
cnt--;
}
}
cout << ans << endl;
}
return 0;
}