C. LIS or Reverse LIS?
https://codeforces.com/problemset/problem/1682/C
题意:给定长度为n的数组a,问a的任意排列的逆序和正序的LIS的较小的一个,最长是多少。
思路:如果某个字符出现大于两次,那么这个数字可以被正序和逆序同时使用,长度+1。如果某个数字出现1次,那么可以被正序或者逆序使用,而且有一个单独出现的字符可以被正序和逆序同时使用
总结:写了半天,想了多种构造方法,仍无法通过tc2,没想到思路直接错了。。还写LIS,服了。
inline void solve() {
int n;
cin >> n;
vector<int> a(n);
map<int, int> mapp;
for (auto& x : a) {
cin >> x;
mapp[x] ++;
}
int d = 0, s = 0;
for (const auto& [x, y] : mapp) {
if (y >= 2) {
d ++;
}
else {
s ++;
}
}
cout << (d + (s + 1) / 2) << '\n';
}

浙公网安备 33010602011771号