Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define all(x) (x).begin(),(x).end()
- struct data {
- int x = 0, y = 0, z = 0;
- data() {}
- data(int _x, int _y, int _z) {
- x = _x; y = _y; z = _z;
- }
- };
- const int N = 16005 * 6;
- int bit[N + 5];
- void update(int i, int v) {
- for (; i <= N; i += i & -i) {
- bit[i] = max(bit[i], v);
- }
- }
- int get(int i) {
- int v = 0;
- for (; i; i -= i & -i) {
- v = max(v, bit[i]);
- }
- return v;
- }
- void solve(int n) {
- memset(bit, 0, sizeof(bit));
- vector<data> a;
- set<int> s;
- for (int i = 0; i < n; i++) {
- int x, y, z;
- cin >> x >> y >> z;
- a.push_back(data(x, y, z));
- a.push_back(data(y, x, z));
- a.push_back(data(y, z, x));
- a.push_back(data(z, y, x));
- a.push_back(data(z, x, y));
- a.push_back(data(x, z, y));
- s.insert(x); s.insert(y); s.insert(z);
- }
- n *= 6;
- vector<int> v(all(s));
- for (int i = 0; i < (int) a.size(); i++) {
- a[i].x = v.end() - lower_bound(all(v), a[i].x);
- a[i].y = v.end() - lower_bound(all(v), a[i].y);
- }
- sort(a.begin(), a.end(), [](data a, data b) -> bool {
- if (a.x == b.x) {
- if (a.y == b.y) return a.z > b.z;
- else return a.y > b.y;
- }
- else return a.x < b.x;
- });
- for (int i = 0; i < n; i++) {
- int v = get(a[i].y);
- update(a[i].y + 1, v + a[i].z);
- }
- cout << get(N) << '\n';
- }
- signed main() {
- for (int n; cin >> n && n; solve(n));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement