Submission #931898

#TimeUsernameProblemLanguageResultExecution timeMemory
931898ace5Team Contest (JOI22_team)C++17
18 / 100
179 ms32980 KiB
#include <bits/stdc++.h>

using namespace std;

#define int int64_t

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    int xm[3][n];
    vector<vector<pair<int,int>>> x(3,vector<pair<int,int>>(n));
    vector<vector<int>> c(n);
    vector<int> rem(n,1);
    set<pair<int,int>> ck;
    vector<int> yk(3);
    vector<int> km(3);
    for(int i = 0;i < n;++i)
    {
        cin >> xm[0][i] >> xm[1][i] >> xm[2][i];
        x[0][i] = {xm[0][i],i};
        x[1][i] = {xm[1][i],i};
        x[2][i] = {xm[2][i],i};
    }
    for(int j =0;j < 3;++j)
    {
        yk[j] = -1;
        sort(x[j].begin(),x[j].end());
        for(int u = x[j].size()-1;u >= 0;--u)
        {
            if(x[j][u].first == x[j].back().first)
            {
                c[x[j][u].second].push_back(j);
                km[j]++;
            }
            else
            {
                yk[j] = u;
                break;
            }
        }
    }
    for(int j = 0;j < n;++j)
    {
        ck.insert({-int(c[j].size()),j});
    }
    int ky =n;
    while(ck.size())
    {
        int v = (*ck.begin()).second;
        ck.erase(ck.begin());
        if(c[v].size() >= 2)
        {
            ky--;
            rem[v] = 0;
            for(auto j:c[v])
            {
                km[j]--;
                if(km[j] == 0)
                {
                    int nyk = -1;
                    for(int u = yk[j];u >= 0;--u)
                    {
                        if(rem[x[j][u].second] == 0)
                        {
                            continue;
                        }
                        if(x[j][u].first == x[j][yk[j]].first)
                        {
                            ck.erase({-int(c[x[j][u].second].size()),x[j][u].second});
                            c[x[j][u].second].push_back(j);
                            ck.insert({-int(c[x[j][u].second].size()),x[j][u].second});
                            km[j]++;
                        }
                        else
                        {
                            nyk = u;
                            break;
                        }
                    }
                    yk[j] = nyk;
                }
            }
            c[v].clear();
        }
        else
            break;
    }
    int64_t ans = 0;
    for(int i = 0;i < 3;++i)
    {
        int64_t mx = 0;
        for(int j = 0;j < n;++j)
        {
            mx = max(mx,rem[j] * xm[i][j]);
        }
        ans += mx;
    }
    cout << (ans == 0 || ky <= 2 ? -1 : ans);
    return 0;
}
#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...