#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<int> necklace(n);
vector<int> necklace_duplicated(2*n);
vector<int> order(2*n);
for (int i = 0; i < n; i++)
{
cin >> necklace[i];
}
for (int i = 0; i<necklace.size(); i++)
{
necklace_duplicated[i] = necklace[i];
necklace_duplicated[n+i] = necklace[i];
}
order[0] = -necklace_duplicated[necklace_duplicated.size()-1];
int longest_seq = 1;
int last_idx = 0;
for (int idx = necklace_duplicated.size()-2; idx >= 0; idx--)
{
int pearl = necklace_duplicated[idx];
vector<int>::iterator lower = lower_bound(order.begin(), std::next(order.begin(), last_idx+1), -pearl);
int x = lower-order.begin();
if(x == last_idx+1)
{
order[x] = -pearl;
longest_seq = max(longest_seq, x + 1);
last_idx = x;
}
else
{
order[x] = -pearl;
last_idx = x;
}
}
cout << longest_seq << endl;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> necklace(n); vector<int> necklace_duplicated(2*n); vector<int> order(2*n); for (int i = 0; i < n; i++) { cin >> necklace[i]; } for (int i = 0; i<necklace.size(); i++) { necklace_duplicated[i] = necklace[i]; necklace_duplicated[n+i] = necklace[i]; } order[0] = -necklace_duplicated[necklace_duplicated.size()-1]; int longest_seq = 1; int last_idx = 0; for (int idx = necklace_duplicated.size()-2; idx >= 0; idx--) { int pearl = necklace_duplicated[idx]; vector<int>::iterator lower = lower_bound(order.begin(), std::next(order.begin(), last_idx+1), -pearl); int x = lower-order.begin(); if(x == last_idx+1) { order[x] = -pearl; longest_seq = max(longest_seq, x + 1); last_idx = x; } else { order[x] = -pearl; last_idx = x; } } cout << longest_seq << endl; } |
English