Submission #1151798

#TimeUsernameProblemLanguageResultExecution timeMemory
1151798trandangquangPinball (JOI14_pinball)C++20
51 / 100
221 ms9400 KiB
#include <bits/stdc++.h> using namespace std; #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 sz(a) (int)(a).size() #define all(a) (a).begin(), (a).end() #define bit(s, i) (((s) >> (i)) & 1) #define ii pair <int, int> #define fi first #define se second #define ll long long #define eb emplace_back #define pb push_back #define __builtin_popcount __builtin_popcountll template <class X, class Y> bool maximize(X &x, Y y) { if(x < y) { x = y; return true; } return false; } template <class X, class Y> bool minimize(X &x, Y y) { if(x > y) { x = y; return true; } return false; } void solve(); int32_t main() { #define task "test" if(fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } cin.tie(0)->sync_with_stdio(0); solve(); } const ll INFLL=1e18; const int N=100005; int m,n,a[N],b[N],c[N],d[N]; ll res=INFLL; vector<int> rar; struct segmentTree{ ll st[N<<2]; void build(int id, int l, int r){ if(l==r){ st[id]=INFLL; return; } int mid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); st[id]=min(st[id<<1],st[id<<1|1]); } void upd(int x, ll val){ int id=1, l=0, r=sz(rar)-1; while(l<r){ int mid=(l+r)>>1; if(x<=mid){ r=mid; id=id<<1; } else{ l=mid+1; id=id<<1|1; } } st[id]=min(st[id],val); while(id>1){ id/=2; st[id]=min(st[id<<1],st[id<<1|1]); } } ll get(int u, int v, int id, int l, int r){ if(u>r||v<l) return INFLL; if(u<=l&&r<=v) return st[id]; int mid=(l+r)>>1; return min(get(u,v,id<<1,l,mid),get(u,v,id<<1|1,mid+1,r)); } /// void build(){ build(1,0,sz(rar)-1); } ll get(int u, int v){ return get(u,v,1,0,sz(rar)-1); } } smt1,smtn; void solve() { cin>>m>>n; rar.eb(1); rar.eb(n); FOR(i,1,m){ cin>>a[i]>>b[i]>>c[i]>>d[i]; rar.eb(a[i]); rar.eb(b[i]); rar.eb(c[i]); } sort(all(rar)); rar.erase(unique(all(rar)),rar.end()); smt1.build(); smt1.upd(0,0); smtn.build(); smtn.upd(sz(rar)-1,0); FOR(i,1,m){ a[i]=lower_bound(all(rar),a[i])-rar.begin(); b[i]=lower_bound(all(rar),b[i])-rar.begin(); c[i]=lower_bound(all(rar),c[i])-rar.begin(); minimize(res,smt1.get(a[i],b[i])+smtn.get(a[i],b[i])+d[i]); smt1.upd(c[i],smt1.get(a[i],b[i])+d[i]); smtn.upd(c[i],smtn.get(a[i],b[i])+d[i]); } FOR(i,0,sz(rar)-1) minimize(res,smt1.get(i,i)+smtn.get(i,i)); cout<<((res==INFLL)?-1:res)<<'\n'; }

Compilation message (stderr)

pinball.cpp: In function 'int32_t main()':
pinball.cpp:39:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |                 freopen(task".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
pinball.cpp:40:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |                 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...