제출 #963785

#제출 시각아이디문제언어결과실행 시간메모리
963785RaresFelixTeam Contest (JOI22_team)C++17
0 / 100
1 ms604 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("O3") //#pragma GCC target("avx,avx2,fma") #define sz(x) int((x).size()) #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() using namespace std; #define int ll using ll = long long; using ld = long double; // or double, if TL is tight using str = string; using ii = pair<int, int>; using pl = pair<ll, ll>; using vi = vector<int>; using vll = vector<ll>; struct om { int x, y, z; }; struct AIB { /// maxim pe prefix int n; vi V; AIB(int N) : n(N + 1), V(N + 1, -1) {} void update(int p, int v) { ++p; while(p < n) { V[p] = max(V[p], v); p += p & -p; } } int query(int p) { int re = -1; ++p; while(p) { re = max(re, V[p]); p -= p & -p; } return re; } }; struct Plan { int n; ll re = -1; map<int, int> MY, MZ; /// normalizari pt coordonate AIB MaxY, MaxZ; /// Maximele pt coordonate, dar normalizate dupa cealalta coord Plan(int N, map<int, int> MY0, map<int, int> MZ0) : n(N), MY(MY0), MZ(MZ0), MaxY(N), MaxZ(N) {} void insert(int y, int z) { /// il leg pe y cu ceva mai mic ca el ll v = MaxY.query(MZ[z] - 1); if(v != -1) re = max(re, v + z); v = MaxZ.query(MY[y] - 1); if(v != -1) re = max(re, v + y); MaxZ.update(MY[y], z); MaxY.update(MZ[z], y); } ll query() { return re; } }; signed main() { cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; vector<om> V; vi Y, Z; for(int i = 0; i < n; ++i) { int x, y, z; cin >> x >> y >> z; Y.push_back(y); Z.push_back(z); V.push_back({x, y, z}); } auto norm_map = [&](vi &A) { sort(all(A)); A.resize(unique(all(A)) - A.begin()); int cnt = 0; map<int, int> M; for(int i = 0; i < A.size(); ++i) M[A[i]] = i; return M; }; sort(all(V), [&](auto a, auto b) { return a.x < b.x; }); Plan Sol(n, norm_map(Y), norm_map(Z)); ll re = -1; for(int i = 0; i < n; ++i) { int dr = i; while(dr + 1 < n && V[dr + 1].x == V[i].x) ++dr; ll cre = Sol.query(); if(cre != -1) { cre += V[dr].x; re = max(re, cre); } for(int j = i; j <= dr; ++j) Sol.insert(V[j].y, V[j].z); i = dr; } cout << re << "\n"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

team.cpp: In lambda function:
team.cpp:95:26: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |         for(int i = 0; i < A.size(); ++i)
      |                        ~~^~~~~~~~~~
team.cpp:93:13: warning: unused variable 'cnt' [-Wunused-variable]
   93 |         int cnt = 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...