题目链接:https://ac.nowcoder.com/acm/contest/11169/A
思路:按照第一个人的右边界排序,记录每次涂色是第几次涂,一次涂色可以被记录时,它的涂色的次数一定要比前一次的涂色的次数大。
代码:
#include<iostream>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
struct ST{
ll id;
ll r;
bool operator <(ST B)const{
if(r!=B.r) return r>B.r;
return id>B.id;
}
};
vector<ST> v;
int main(){
ll n;
cin>>n;
ll ans=0;
for(ll i=1;i<=n;i++){
ll x;
cin>>x;
v.push_back(ST{i,x});
}
sort(v.begin(),v.end());
ll maxx=-1;
ll pre=-1;
for(int i=0;i<v.size();i++){
if(v[i].id>maxx&&v[i].r!=pre) {ans++;
maxx=max(maxx,v[i].id);}
pre=v[i].r;
}
cout<<ans<<endl;
}
题解中可能有错误或者遗漏,大家见谅.