Submission #719751

#TimeUsernameProblemLanguageResultExecution timeMemory
719751lamTeam Contest (JOI22_team)C++14
36 / 100
121 ms6044 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 5e4 + 10;
typedef pair<int,int> ii;
typedef pair<int,ii> iii;
#define ff first
#define ss second
int n;
iii a[maxn];
vector <iii> d;
map<ii,bool> mp;
int mmin[maxn],mmax[maxn];
ii vval;
void add(iii x)
{
//    cout<<"+ "<<x.ff<<' '<<x.ss.ff<<' '<<x.ss.ss<<'\n';
    int y = x.ss.ff;
    mmax[y]=max(mmax[y],x.ss.ss);
    mmin[y]=min(mmin[y],x.ss.ss);
}
int query(iii x)
{
    int y=x.ss.ff;
    int ans=-1;
    if (vval.ff!=-1&&vval.ss>x.ss.ss&&vval.ff>y) ans=max(ans,vval.ff+vval.ss+x.ff);
    return ans;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>a[i].ff>>a[i].ss.ff>>a[i].ss.ss;
    for (int i=0; i<=4000; i++)
        mmin[i] = 1e9, mmax[i]=-1e9;
    sort(a+1,a+n+1);
    d.clear();
    int l,r;
    int ans=-1;
    for (int i=1; i<=n; i++)
    {
        if (i==1||a[i].ff!=a[i-1].ff) l=i;
        if (i==n||a[i].ff!=a[i+1].ff)
        {
            r=i;
            int l2,r2;
            vval={-1,-1};
            for (int j=4000; j>=1; j--) if (mmin[j]!=1e9&&mmax[j-1]!=-1e9&&mmax[j-1]>mmin[j])
            {
                vval = {j,mmax[j-1]};
                break;
            }
//            cout<<a[i].ff<<" := "<<vval.ff<<' '<<vval.ss<<'\n';
//            for (int j=1; j<=10; j++) cout<<mmin[j]<<','<<mmax[j]<<"  "; cout<<'\n';
            for (int j=l; j<=r; j++)
            {
                if (j==l||a[j].ss.ff!=a[j-1].ss.ff) l2=j;
                if (j==r||a[j].ss.ff!=a[j+1].ss.ff)
                {
                    r2=j;
                    ans=max(ans,query(a[l2]));
                    ans=max(ans,query(a[r2]));
                }
            }
            for (int j=l; j<=r; j++)
            {
                if (j==l||a[j].ss.ff!=a[j-1].ss.ff) l2=j;
                if (j==r||a[j].ss.ff!=a[j+1].ss.ff)
                {
                    r2=j;
                    add(a[r2]);
                    add(a[l2]);
                }
            }
            for (int j=1; j<=4000; j++) mmax[j]=max(mmax[j],mmax[j-1]);
        }
    }
    cout<<ans<<'\n';
}

Compilation message (stderr)

team.cpp: In function 'int main()':
team.cpp:47:17: warning: 'l2' may be used uninitialized in this function [-Wmaybe-uninitialized]
   47 |             int l2,r2;
      |                 ^~
#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...