This documentation is automatically generated by competitive-verifier/competitive-verifier
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/JOI/Prelim/0655
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#include <algorithm>
#include "src/Misc/compress.hpp"
#include "src/DataStructure/RangeSet.hpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
int A[N];
for (int i= 0; i < N; ++i) cin >> A[i];
vector<int> vec(A, A + N);
auto id= compress(vec);
int n= vec.size();
vector<int> group[n];
for (int i= 0; i < N; ++i) group[id(A[i])].push_back(i);
RangeSet<int> rs;
int ans= 0;
for (int i= n; i--;) {
if (vec[i] == 0) break;
for (int j: group[i]) rs.insert(j);
ans= max(ans, (int)rs.size());
}
cout << ans << '\n';
return 0;
}
#line 1 "test/aoj/0655.test.cpp"
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/JOI/Prelim/0655
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#include <algorithm>
#line 4 "src/Misc/compress.hpp"
template <class T> auto compress(std::vector<T> &v) {
return std::sort(v.begin(), v.end()), v.erase(std::unique(v.begin(), v.end()), v.end()), [&v](T x) { return std::lower_bound(v.begin(), v.end(), x) - v.begin(); };
}
#line 3 "src/DataStructure/RangeSet.hpp"
#include <set>
#include <iterator>
#include <limits>
#include <cassert>
template <class Int, bool merge= true> class RangeSet {
struct ClosedSection {
Int l, r;
Int length() const { return r - l + 1; }
bool operator<(const ClosedSection &cs) const { return l < cs.l || (l == cs.l && r > cs.r); }
operator bool() const { return l <= r; }
friend std::ostream &operator<<(std::ostream &os, const ClosedSection &cs) { return cs ? os << "[" << cs.l << "," << cs.r << "]" : os << "∅"; }
};
std::set<ClosedSection> mp;
public:
RangeSet() {
constexpr Int INF= std::numeric_limits<Int>::max() / 2;
mp.insert({INF, INF}), mp.insert({-INF, -INF});
}
ClosedSection covered_by(Int l, Int r) const {
assert(l <= r);
if (auto it= std::prev(mp.upper_bound(ClosedSection{l, l})); it->l <= l && r <= it->r) return *it;
return {1, 0};
}
ClosedSection covered_by(Int x) const { return covered_by(x, x); }
ClosedSection covered_by(const ClosedSection &cs) const { return covered_by(cs.l, cs.r); }
size_t size() const { return mp.size() - 2; }
auto begin() const { return std::next(mp.begin()); }
auto end() const { return std::prev(mp.end()); }
Int insert(Int l, Int r) {
assert(l <= r);
auto it= std::prev(mp.upper_bound(ClosedSection{l, l}));
Int sum= 0, x= it->l, y= it->r;
if (x <= l && r <= y) return sum;
if (x <= l && l <= y + merge) sum+= y - (l= x) + 1, it= mp.erase(it);
else std::advance(it, 1);
for (; it->r < r; it= mp.erase(it)) sum+= it->r - it->l + 1;
if (x= it->l, y= it->r; x - merge <= r && r <= y) sum+= (r= y) - x + 1, mp.erase(it);
return mp.insert({l, r}), r - l + 1 - sum;
}
Int insert(Int x) { return insert(x, x); }
Int insert(const ClosedSection &cs) { return insert(cs.l, cs.r); }
Int erase(Int l, Int r) {
assert(l <= r);
auto it= std::prev(mp.upper_bound(ClosedSection{l, l}));
Int sum= 0, x= it->l, y= it->r;
if (x <= l && r <= y) {
if (mp.erase(it); x < l) mp.insert({x, l - 1});
if (r < y) mp.insert({r + 1, y});
return r - l + 1;
}
if (x <= l && l <= y) {
if (x < l) mp.insert({x, l - 1});
sum+= y - l + 1, it= mp.erase(it);
} else std::advance(it, 1);
for (; it->r <= r; it= mp.erase(it)) sum+= it->r - it->l + 1;
if (x= it->l, y= it->r; x <= r && r <= y)
if (sum+= r - x + 1, mp.erase(it); r < y) mp.insert({r + 1, y});
return sum;
}
Int erase(Int x) { return erase(x, x); }
Int erase(const ClosedSection &cs) { return erase(cs.l, cs.r); }
Int mex(Int x) const {
auto cs= covered_by(x);
return cs ? cs.r + 1 : x;
}
friend std::ostream &operator<<(std::ostream &os, const RangeSet &rs) {
os << "[";
for (auto it= rs.begin(); it != rs.end(); ++it) os << (it == rs.begin() ? "" : ",") << *it;
return os << "]";
}
};
#line 9 "test/aoj/0655.test.cpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
int A[N];
for (int i= 0; i < N; ++i) cin >> A[i];
vector<int> vec(A, A + N);
auto id= compress(vec);
int n= vec.size();
vector<int> group[n];
for (int i= 0; i < N; ++i) group[id(A[i])].push_back(i);
RangeSet<int> rs;
int ans= 0;
for (int i= n; i--;) {
if (vec[i] == 0) break;
for (int j: group[i]) rs.insert(j);
ans= max(ans, (int)rs.size());
}
cout << ans << '\n';
return 0;
}
Env | Name | Status | Elapsed | Memory |
---|---|---|---|---|
g++-13 | 00-sample-01.txt |
![]() |
9 ms | 4 MB |
g++-13 | 00-sample-02.txt |
![]() |
7 ms | 4 MB |
g++-13 | 00-sample-03.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-01.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-02.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-03.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-04.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-05.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-06.txt |
![]() |
8 ms | 4 MB |
g++-13 | 01-07.txt |
![]() |
8 ms | 4 MB |
g++-13 | 01-08.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-09.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-10.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-11.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-12.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-13.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-14.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-15.txt |
![]() |
7 ms | 4 MB |
g++-13 | 01-16.txt |
![]() |
8 ms | 4 MB |
g++-13 | 02-01.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-02.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-03.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-04.txt |
![]() |
8 ms | 4 MB |
g++-13 | 02-05.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-06.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-07.txt |
![]() |
7 ms | 4 MB |
g++-13 | 02-08.txt |
![]() |
8 ms | 4 MB |
g++-13 | 02-09.txt |
![]() |
8 ms | 4 MB |
g++-13 | 02-10.txt |
![]() |
8 ms | 4 MB |
g++-13 | 03-01.txt |
![]() |
11 ms | 4 MB |
g++-13 | 03-02.txt |
![]() |
13 ms | 5 MB |
g++-13 | 03-03.txt |
![]() |
22 ms | 6 MB |
g++-13 | 03-04.txt |
![]() |
31 ms | 6 MB |
g++-13 | 03-05.txt |
![]() |
43 ms | 6 MB |
g++-13 | 03-06.txt |
![]() |
53 ms | 6 MB |
g++-13 | 03-07.txt |
![]() |
60 ms | 6 MB |
g++-13 | 03-08.txt |
![]() |
68 ms | 9 MB |
g++-13 | 03-09.txt |
![]() |
73 ms | 11 MB |
g++-13 | 03-10.txt |
![]() |
28 ms | 10 MB |
g++-13 | 03-11.txt |
![]() |
28 ms | 10 MB |
g++-13 | 03-12.txt |
![]() |
25 ms | 7 MB |
g++-13 | 03-13.txt |
![]() |
19 ms | 5 MB |
g++-13 | 03-14.txt |
![]() |
26 ms | 6 MB |
g++-13 | 03-15.txt |
![]() |
34 ms | 6 MB |
g++-13 | 03-16.txt |
![]() |
45 ms | 6 MB |
g++-13 | 03-17.txt |
![]() |
55 ms | 6 MB |
g++-13 | 03-18.txt |
![]() |
61 ms | 6 MB |
g++-13 | 03-19.txt |
![]() |
69 ms | 9 MB |
g++-13 | 03-20.txt |
![]() |
76 ms | 11 MB |
clang++-18 | 00-sample-01.txt |
![]() |
9 ms | 4 MB |
clang++-18 | 00-sample-02.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 00-sample-03.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-01.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-02.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-03.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-04.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-05.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-06.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-07.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-08.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-09.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 01-10.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-11.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-12.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-13.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-14.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-15.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 01-16.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 02-01.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-02.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-03.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-04.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 02-05.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-06.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-07.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-08.txt |
![]() |
7 ms | 4 MB |
clang++-18 | 02-09.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 02-10.txt |
![]() |
8 ms | 4 MB |
clang++-18 | 03-01.txt |
![]() |
12 ms | 4 MB |
clang++-18 | 03-02.txt |
![]() |
14 ms | 5 MB |
clang++-18 | 03-03.txt |
![]() |
23 ms | 6 MB |
clang++-18 | 03-04.txt |
![]() |
33 ms | 6 MB |
clang++-18 | 03-05.txt |
![]() |
44 ms | 6 MB |
clang++-18 | 03-06.txt |
![]() |
55 ms | 6 MB |
clang++-18 | 03-07.txt |
![]() |
59 ms | 6 MB |
clang++-18 | 03-08.txt |
![]() |
69 ms | 9 MB |
clang++-18 | 03-09.txt |
![]() |
78 ms | 11 MB |
clang++-18 | 03-10.txt |
![]() |
28 ms | 10 MB |
clang++-18 | 03-11.txt |
![]() |
28 ms | 10 MB |
clang++-18 | 03-12.txt |
![]() |
26 ms | 7 MB |
clang++-18 | 03-13.txt |
![]() |
20 ms | 5 MB |
clang++-18 | 03-14.txt |
![]() |
28 ms | 6 MB |
clang++-18 | 03-15.txt |
![]() |
35 ms | 6 MB |
clang++-18 | 03-16.txt |
![]() |
45 ms | 6 MB |
clang++-18 | 03-17.txt |
![]() |
54 ms | 6 MB |
clang++-18 | 03-18.txt |
![]() |
61 ms | 6 MB |
clang++-18 | 03-19.txt |
![]() |
69 ms | 9 MB |
clang++-18 | 03-20.txt |
![]() |
72 ms | 11 MB |