Submission #1215959

#TimeUsernameProblemLanguageResultExecution timeMemory
1215959nvc2k8Pinball (JOI14_pinball)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define TASK "asdkajsdkjasd" #define endl '\n' #define mp make_pair #define pb push_back #define fi first #define se second #define BIT(i,x) (((i)>>(x))&1) #define FOR(i,a,b) for(int i = (a); i<=(b); i++) #define FORD(i,a,b) for(int i = (a); i>=(b); i--) #define all(C) C.begin(), C.end() using namespace std; using ll = long long; const int INT_LIM = 2147483647; const ll LL_LIM = 9223372036854775807; template <typename X> bool minimize(X &x, const X &y) {if (x>y){x = y; return true;}return false;} template <typename X> bool maximize(X &x, const X &y) {if (x<y){x = y; return true;}return false;} ///------------------------------------------/// struct SegmentTree{ ll T[300000*4+5]; void build(int id, int l, int r) { if (l==r) { T[id] = LL_LIM; return; } int mid = (l+r)>>1; build(id*2, l, mid); build(id*2+1, mid+1, r); T[id] = LL_LIM; } void update(int id, int l, int r, int u, ll val) { if (l>u || r<u) return; if (l==r) { T[id] = val; return; } int mid = (l+r)>>1; update(id*2, l, mid, u, val); update(id*2+1, mid+1, r, u, val); T[id] = min(T[id*2], T[id*2+1]); } ll get(int id, int l, int r, int u, int v) { if (l>v || r<u) return LL_LIM; if (l>=u && r<=v) return T[id]; int mid = (l+r)>>1; return min(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v)); } } tree1, tree2; int n,m,M; struct item{ int a,b,c; } a[100005]; ll c[100005]; void inp() { cin >> n >> m; map<int, vector<int*>> CC; CC[m].pb(&m); FOR(i, 1, n) { cin >> a[i].a >> a[i].b >> a[i].c >> c[i]; CC[a[i].a].pb(&a[i].a); CC[a[i].b].pb(&a[i].b); CC[a[i].c].pb(&a[i].c); } for (auto V:CC) { M++; for (auto i:V.se) { *i = M; } } tree1.build(1, 1, M); tree2.build(1, 1, M); } void solve() { ll ans = LL_LIM; FOR(i, 1, n) { ll lterm = LL_LIM, rterm = LL_LIM; if (a[i].a==1) lterm = 0; else lterm = tree1.get(1, 1, M, a[i].a, a[i].b); if (a[i].b==M) rterm = 0; else rterm = tree2.get(1, 1, M, a[i].a, a[i].b); if (lterm!=LL_LIM) { tree1.update(1, 1, M, a[i].c, lterm+c[i]); } if (rterm!=LL_LIM) { tree2.update(1, 1, M, a[i].c, rterm+c[i]); } // cout << i << ' ' << lterm << ' ' << rterm << endl; if (lterm!=LL_LIM && rterm!=LL_LIM) { minimize(ans, lterm+rterm+c[i]); } } if (ans==LL_LIM) cout << -1; else cout << ans; } signed main() { ///--------------------------/// // ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); if (fopen(TASK".INP","r")!=NULL) { freopen(TASK".INP","r",stdin); freopen(TASK".OUT","w",stdout); } ///--------------------------/// int NTEST = 1; bool codeforces = 0; if (codeforces) cin >> NTEST; while (NTEST--) { inp(); solve(); } return 0; } ///------------------------------------------///

Compilation message (stderr)

pinball.cpp: In function 'int main()':
pinball.cpp:126:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  126 |         freopen(TASK".INP","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
pinball.cpp:127:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  127 |         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...