Submission #550298

# Submission time Handle Problem Language Result Execution time Memory
550298 2022-04-17T20:03:50 Z BalintR Team Contest (JOI22_team) C++17
0 / 100
50 ms 5716 KB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize "Ofast"
#pragma GCC target "avx2,avx2"

typedef unsigned uint;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vpii;
typedef complex<double> cmplx;
template <typename T> using minPq = priority_queue<T, vector<T>, greater<T>>;
#define boost() cin.sync_with_stdio(0); cin.tie(0)
#define ms(a, x) memset(a, x, sizeof(a))
#define pb push_back
#define fs first
#define sn second
#define ALL(v) (v).begin(), (v).end()
#define SZ(v) ((int) (v).size())
#define lbv(v, x) (lower_bound((v).begin(), (v).end(), x) - (v).begin())
#define ubv(v, x) (upper_bound((v).begin(), (v).end(), x) - (v).begin())
template <typename T> inline void UNIQUE(vector<T> &v){sort(ALL(v)); v.resize(unique(ALL(v)) - v.begin());}
const int INF = 0x3f3f3f3f;
const ll LLINF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1);
#define FR(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define FORR(i, a, b) for(int i = (a); i >= (b); i--)
#define dbg(x) {cout << #x << ' ' << x << endl;}
#define dbgArr(arr, n) {cout << #arr; FR(_i, n) cout << ' ' << arr[_i]; cout << endl;}

typedef array<int, 3> trip;

const int MN = 150005;
int n;
vector<trip> vec;
vi ys, zs;
int mxZPref[MN], mxYPref[MN], mnYSuf[MN], mxAnsSuf[MN];

int main(){
    boost();
    cin >> n;
    FR(i, n){
        int a, b, c;
        cin >> a >> b >> c;
        vec.pb({a, b, c});
        ys.pb(b);
        zs.pb(c);
    }

    UNIQUE(vec);
    UNIQUE(ys);
    UNIQUE(zs);
    n = SZ(ys);

    int ans = -1;
    int lst = 0, prvX = vec[0][0];
    ms(mnYSuf, INF);

    FR(i, SZ(vec)){
        if(vec[i][0] != prvX){
            FOR(j, lst, i){
                auto [x, y, z] = vec[j];
                int yPos = lbv(ys, y);
                int zPos = lbv(zs, z);

                int mz = 0;
                for(int k = yPos; k; k -= k & -k) mz = max(mz, mxZPref[k]);
                if(mz > z) for(int k = MN-yPos-1; k < MN; k += k & -k) mxAnsSuf[k] = max(mxAnsSuf[k], y + mz);
                for(int k = zPos+1; k < MN; k += k & -k) mxYPref[k] = max(mxYPref[k], y);
                for(int k = MN-zPos-1; k < MN; k += k & -k) mnYSuf[k] = min(mnYSuf[k], yPos);

                int mxY = 0;
                for(int k = zPos; k; k -= k & -k) mxY = max(mxY, mxYPref[k]);
                if(mxY > y){
                    int yp1 = lbv(ys, mxY);
                    for(int k = MN-yp1-1; k < MN; k += k & -k) mxAnsSuf[k] = max(mxAnsSuf[k], mxY + z);
                }
                for(int k = yPos+1; k < MN; k += k & -k) mxZPref[k] = max(mxZPref[k], z);
            }

            prvX = vec[i][0];
            lst = i;
        }

        auto [x, y, z] = vec[i];
        int yPos = lbv(ys, y);
        int zPos = lbv(zs, z);

        int mnY = INF;
        for(int j = MN-zPos-2; j; j -= j & -j) mnY = min(mnY, mnYSuf[j]);

        int mxSum = 0;
        for(int j = MN-1-max(yPos+1, mnY); j > 0; j -= j & -j) mxSum = max(mxSum, mxAnsSuf[j]);
        if(mxSum) ans = max(ans, mxSum + x);
    }

    cout << ans << '\n';
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 852 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 1 ms 840 KB Output is correct
12 Correct 1 ms 852 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Incorrect 1 ms 980 KB Output isn't correct
16 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 852 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 1 ms 840 KB Output is correct
12 Correct 1 ms 852 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Incorrect 1 ms 980 KB Output isn't correct
16 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 836 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 50 ms 5716 KB Output is correct
12 Incorrect 42 ms 3808 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 836 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 50 ms 5716 KB Output is correct
12 Incorrect 42 ms 3808 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 836 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 50 ms 5716 KB Output is correct
12 Incorrect 42 ms 3808 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 836 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 50 ms 5716 KB Output is correct
12 Incorrect 42 ms 3808 KB Output isn't correct
13 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 980 KB Output is correct
2 Correct 1 ms 980 KB Output is correct
3 Correct 1 ms 852 KB Output is correct
4 Correct 1 ms 980 KB Output is correct
5 Correct 1 ms 980 KB Output is correct
6 Correct 1 ms 980 KB Output is correct
7 Correct 1 ms 980 KB Output is correct
8 Correct 1 ms 852 KB Output is correct
9 Correct 1 ms 980 KB Output is correct
10 Correct 1 ms 980 KB Output is correct
11 Correct 1 ms 840 KB Output is correct
12 Correct 1 ms 852 KB Output is correct
13 Correct 1 ms 980 KB Output is correct
14 Correct 1 ms 980 KB Output is correct
15 Incorrect 1 ms 980 KB Output isn't correct
16 Halted 0 ms 0 KB -