Submission #1127014

#TimeUsernameProblemLanguageResultExecution timeMemory
1127014whoTeam Contest (JOI22_team)C++20
100 / 100
116 ms5308 KiB
#include <bits/stdc++.h>

using namespace std;

#define task "a"
#define etr "\n"
#define ll long long
#define ld long double
#define pii pair<int,int>
#define pli pair<long long,int>
#define pll pair<long long, long long>
#define fi first
#define se second
#define bg begin
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define lwb lower_bound
#define upb upper_bound
#define range(x, l, r) x+l, x+1+r
#define all(x) (x).bg(), (x).end()
#define compact(x) x.resize(unique(all(x)) - (x).bg())
#define sq(x) ((x)*(x))

auto start = chrono::high_resolution_clock::now();

void start_timer()
{
    start = chrono::high_resolution_clock::now();
}

ld elapsed()
{
    auto current = chrono::high_resolution_clock::now();
    ld duration = chrono::duration_cast<chrono::nanoseconds>(current - start).count();
    return duration / 1e9;
}
void freop()
{
	freopen(task".inp", "r", stdin);
	freopen(task".out", "w", stdout);
}

template<class U, class V> istream& operator >> (istream& in, pair<U, V>& p)
{
	in >> p.fi >> p.se;
	return in;
}

template<class U, class V> ostream& operator << (ostream& out, pair<U, V> p)
{
	out << "{" << p.fi << ' ' << p.se << "}";
	return out;
}

template<class T> ostream& operator << (ostream& out, vector<T>& v)
{
    out << "{";
	for (int i=0; i<v.size(); i++)
    {
        out << v[i];
        if (i != v.size() - 1) out << ", ";
    }

    out << "}";
	return out;
}

template<class T, long long unsigned int N> ostream& operator << (ostream& out, array<T, N>& v)
{
    out << "{";
	for (int i=0; i<N; i++)
    {
        out << v[i];
        if (i != N - 1) out << ", ";
    }

    out << "}";
	return out;
}

const int N=2e5, M=1e5, mod=1e9+7;

int n;
array<int, 3> a[N+5];
vector<int> ys, zs;

struct Fenwick
{
    int bit[N+5];

    Fenwick()
    {
        memset(bit, 0, sizeof(bit));
    }

    void update(int idx, int val)
    {
        for (; idx<=n; idx+=idx&-idx) bit[idx] = max(bit[idx], val);
    }

    int get(int idx)
    {
        int res = 0;
        for (; idx; idx-=idx&-idx) res = max(res, bit[idx]);
        return res;
    }
} feny, fenz;

void process()
{
    cin >> n;
    ys.pb(0);
    zs.pb(0);
    for (int i=1; i<=n; i++)
    {
        cin >> a[i][0] >> a[i][1] >> a[i][2];
        ys.pb(a[i][1]);
        zs.pb(a[i][2]);
    }

    sort(all(ys));
    sort(all(zs));

    compact(ys);
    compact(zs);

    for (int i=1; i<=n; i++) a[i][1] = lwb(all(ys), a[i][1]) - ys.bg(), a[i][2] = lwb(all(zs), a[i][2]) - zs.bg();

    sort(range(a, 1, n));

    int res = 0;
    int y = 0, z = 0, j = 1;
    //set<pii> s;
    for (int i=1; i<=n; i++)
    {
        if (a[i][0] != a[i-1][0])
        {
            for (int k=j; k<i; k++)
            {
                int tmpz = feny.get(a[k][1] - 1);
                int tmpy = fenz.get(a[k][2] - 1);

                //cout << i << ' ' << k << ": " << a[k] << ' ' << tmpy << ' ' << tmpz << etr;

                if (tmpz > a[k][2] && tmpz >= z && a[k][1] >= y)
                {
                    y = a[k][1];
                    z = tmpz;
                }

                if (tmpy > a[k][1] && tmpy >= y && a[k][2] >= z)
                {
                    y = tmpy;
                    z = a[k][2];
                }
                feny.update(a[k][1], a[k][2]);
                fenz.update(a[k][2], a[k][1]);
            }

            j = i;
        }

        //cout << a[i] << ": " << y << ' ' << z << etr;
        if (y > a[i][1] && z > a[i][2])
        {
            res = max(res, a[i][0] + ys[y] + zs[z]);
        }
    }

    if (res == 0) cout << -1;
    else cout << res;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int t=1; //cin >> t;
	while (t--) process();

	return 0;
}

Compilation message (stderr)

team.cpp: In function 'void freop()':
team.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
team.cpp:42:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...