感受
思路
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 1e18;
const int maxn = 1e3 + 10;
int n;
map<ll, int> mp;
set<ll> s;
void init(){
ll val;
while(scanf("%lld", &val)){
s.insert(val); auto itm = s.lower_bound(val);
if(s.begin() == itm){
puts("无前驱 ");
itm++; if(itm == s.end()) puts("无后驱"); else printf("后驱为%lld\n", *itm);
}
else{
printf("前驱为%lld ", *prev(itm));
itm++; if(itm == s.end()) puts("无后驱"); else printf("后驱为%lld\n", *itm);
}
}
}
int main(){
//init();
scanf("%d", &n);
ll ans = 0, x; mp[inf] = -1; mp[-inf] = -1;
s.insert(inf); s.insert(-inf);
while(n--){
scanf("%lld", &x);
auto itm = s.lower_bound(x);
mp[x] = max(mp[*prev(itm)], mp[*itm]) + 1;
ans += mp[x];
printf("%lld\n", ans);
s.insert(x);
}
return 0;
}



京公网安备 11010502036488号