답안 #674999

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
674999 2022-12-26T18:37:52 Z urosk 치료 계획 (JOI20_treatment) C++14
39 / 100
3000 ms 222820 KB
#define here cerr<<"===========================================\n"
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#include "bits/stdc++.h"
//#include <ext/pb_ds/tree_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
#define ld double
#define ll long long
#define llinf 100000000000000000LL // 10^17
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define endl '\n'
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define sz(a) (ll)(a.size())
#define all(a) a.begin(),a.end()
#define ceri(a,l,r) {cerr<<#a<<": ";for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
#define cer(a) {cerr<<#a<<": ";for(ll x_ : a) cerr<<x_<< " ";cerr<<endl;}

#define daj_mi_malo_vremena ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0);

using namespace std;
//using namespace __gnu_pbds;
/*
ll add(ll x,ll y){
    x+=y;
    if(x<0){
        x%=mod;
        x+=mod;
    }else{
        if(x>=mod) x%=mod;
    }
    return x;
}
ll mul(ll a,ll b){
	ll ans = (a*b)%mod;
	if(ans<0) ans+=mod;
	return ans;
}
typedef tree<int,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
typedef tree<int,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_multiset;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll rnd(ll l,ll r){
    return uniform_int_distribution<ll>(l,r)(rng);
}
*/
#define maxn 100005
#define maxx 400025
ll n,m;
struct tupl{
    ll t,l,r,c;
} a[maxn];
ll tsz = 1,tsz2 = 1;
set<pair<int,int> > t[4*maxn];
set<pair<int,int> > t2[4*maxn];
void upd(ll v,ll tl,ll tr,ll i,pll p,bool f){
    if(f) t[v].insert(p);
    else t[v].erase(p);
    if(tl==tr) return;
    ll mid = (tl+tr)/2;
    if(i<=mid) upd(2*v,tl,mid,i,p,f);
    else upd(2*v+1,mid+1,tr,i,p,f);
}
void upd2(ll v,ll tl,ll tr,ll i,pll p,bool f){
    if(f) t2[v].insert(p);
    else t2[v].erase(p);
    if(tl==tr) return;
    ll mid = (tl+tr)/2;
    if(i<=mid) upd2(2*v,tl,mid,i,p,f);
    else upd2(2*v+1,mid+1,tr,i,p,f);
}
set<ll> s;
void get(ll v,ll tl,ll tr,ll l,ll r,ll x){
    if(l>r) return;
    if(tl==l&&tr==r){
        auto it = t[v].begin();
        while(it!=t[v].end()&&(*it).fi<=x){
            s.insert((*it).sc);
            it++;
        }
        return;
    }
    ll mid = (tl+tr)/2;
    get(2*v,tl,mid,l,min(mid,r),x);
    get(2*v+1,mid+1,tr,max(mid+1,l),r,x);
}
void get2(ll v,ll tl,ll tr,ll l,ll r,ll x){
    if(l>r) return;
    if(tl==l&&tr==r){
        auto it = t2[v].begin();
        while(it!=t2[v].end()&&(*it).fi<=x){
            s.insert((*it).sc);
            it++;
        }
        return;
    }
    ll mid = (tl+tr)/2;
    get2(2*v,tl,mid,l,min(mid,r),x);
    get2(2*v+1,mid+1,tr,max(mid+1,l),r,x);
}
ll d[maxn];
set<ll> st;
map<ll,ll> mp;
ll it = 0;
void tc(){
    cin >> m >> n;
    for(ll i = 1;i<=n;i++) cin >> a[i].t >> a[i].l >> a[i].r >> a[i].c;
    for(ll i = 1;i<=n;i++) a[i].l--;
    for(ll i = 1;i<=n;i++) st.insert(a[i].t);
    for(ll x : st) mp[x] = ++it;
    ll mxt = it;
    for(ll i = 1;i<=n;i++){
        if(a[i].l==0) continue;
        upd(1,1,mxt,mp[a[i].t],{a[i].l+a[i].t,i},1);
        upd2(1,1,mxt,mp[a[i].t],{a[i].l-a[i].t,i},1);
    }
    for(ll i = 1;i<=n;i++) d[i] = llinf;
    priority_queue<pll> pq;
    for(ll i = 1;i<=n;i++){
        if(a[i].l==0){
            d[i] = a[i].c;
            pq.push({-d[i],i});
        }
    }
    while(sz(pq)){
        pll p = pq.top();
        ll i = p.sc;
        pq.pop();
        if(-p.fi!=d[i]) continue;
        s.clear();
        get(1,1,mxt,mp[a[i].t],mxt,a[i].r+a[i].t);
        get2(1,1,mxt,1,mp[a[i].t],a[i].r-a[i].t);
        for(ll j : s){
            if(j==i) continue;
            d[j] = d[i] + a[j].c;
            upd(1,1,mxt,mp[a[j].t],{a[j].l+a[j].t,j},0);
            upd2(1,1,mxt,mp[a[j].t],{a[j].l-a[j].t,j},0);
            pq.push({-d[j],j});
        }
    }
    ll ans = llinf;
    for(ll i = 1;i<=n;i++) if(a[i].r==m) ans = min(ans,d[i]);
    if(ans==llinf) ans = -1;
    cout<<ans<<endl;
}
int main(){
	daj_mi_malo_vremena
    int t; t = 1;
    while(t--){
        tc();
    }
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 133 ms 51148 KB Output is correct
2 Correct 134 ms 51096 KB Output is correct
3 Correct 120 ms 49896 KB Output is correct
4 Correct 131 ms 49948 KB Output is correct
5 Correct 157 ms 53244 KB Output is correct
6 Correct 139 ms 51412 KB Output is correct
7 Correct 107 ms 51148 KB Output is correct
8 Correct 91 ms 51012 KB Output is correct
9 Correct 86 ms 51072 KB Output is correct
10 Correct 77 ms 51184 KB Output is correct
11 Correct 236 ms 56708 KB Output is correct
12 Correct 211 ms 54500 KB Output is correct
13 Correct 187 ms 53300 KB Output is correct
14 Correct 201 ms 53376 KB Output is correct
15 Correct 168 ms 51148 KB Output is correct
16 Correct 177 ms 51176 KB Output is correct
17 Correct 161 ms 51276 KB Output is correct
18 Correct 223 ms 55804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 37800 KB Output is correct
2 Correct 21 ms 37852 KB Output is correct
3 Correct 19 ms 37844 KB Output is correct
4 Correct 19 ms 37852 KB Output is correct
5 Correct 22 ms 37884 KB Output is correct
6 Correct 19 ms 37904 KB Output is correct
7 Correct 22 ms 37880 KB Output is correct
8 Correct 24 ms 37888 KB Output is correct
9 Correct 19 ms 37864 KB Output is correct
10 Correct 22 ms 37844 KB Output is correct
11 Correct 19 ms 37868 KB Output is correct
12 Correct 18 ms 37844 KB Output is correct
13 Correct 20 ms 37844 KB Output is correct
14 Correct 18 ms 37844 KB Output is correct
15 Correct 18 ms 37796 KB Output is correct
16 Correct 20 ms 37844 KB Output is correct
17 Correct 17 ms 37832 KB Output is correct
18 Correct 17 ms 37820 KB Output is correct
19 Correct 21 ms 38016 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 37800 KB Output is correct
2 Correct 21 ms 37852 KB Output is correct
3 Correct 19 ms 37844 KB Output is correct
4 Correct 19 ms 37852 KB Output is correct
5 Correct 22 ms 37884 KB Output is correct
6 Correct 19 ms 37904 KB Output is correct
7 Correct 22 ms 37880 KB Output is correct
8 Correct 24 ms 37888 KB Output is correct
9 Correct 19 ms 37864 KB Output is correct
10 Correct 22 ms 37844 KB Output is correct
11 Correct 19 ms 37868 KB Output is correct
12 Correct 18 ms 37844 KB Output is correct
13 Correct 20 ms 37844 KB Output is correct
14 Correct 18 ms 37844 KB Output is correct
15 Correct 18 ms 37796 KB Output is correct
16 Correct 20 ms 37844 KB Output is correct
17 Correct 17 ms 37832 KB Output is correct
18 Correct 17 ms 37820 KB Output is correct
19 Correct 21 ms 38016 KB Output is correct
20 Correct 45 ms 42708 KB Output is correct
21 Correct 51 ms 42752 KB Output is correct
22 Correct 47 ms 42780 KB Output is correct
23 Correct 46 ms 42820 KB Output is correct
24 Correct 62 ms 43916 KB Output is correct
25 Correct 61 ms 44796 KB Output is correct
26 Correct 58 ms 44816 KB Output is correct
27 Correct 64 ms 44876 KB Output is correct
28 Correct 60 ms 43928 KB Output is correct
29 Correct 56 ms 44720 KB Output is correct
30 Correct 43 ms 44840 KB Output is correct
31 Correct 45 ms 44872 KB Output is correct
32 Correct 68 ms 45100 KB Output is correct
33 Correct 87 ms 45076 KB Output is correct
34 Correct 61 ms 44400 KB Output is correct
35 Correct 72 ms 45100 KB Output is correct
36 Correct 74 ms 45040 KB Output is correct
37 Correct 62 ms 44400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 133 ms 51148 KB Output is correct
2 Correct 134 ms 51096 KB Output is correct
3 Correct 120 ms 49896 KB Output is correct
4 Correct 131 ms 49948 KB Output is correct
5 Correct 157 ms 53244 KB Output is correct
6 Correct 139 ms 51412 KB Output is correct
7 Correct 107 ms 51148 KB Output is correct
8 Correct 91 ms 51012 KB Output is correct
9 Correct 86 ms 51072 KB Output is correct
10 Correct 77 ms 51184 KB Output is correct
11 Correct 236 ms 56708 KB Output is correct
12 Correct 211 ms 54500 KB Output is correct
13 Correct 187 ms 53300 KB Output is correct
14 Correct 201 ms 53376 KB Output is correct
15 Correct 168 ms 51148 KB Output is correct
16 Correct 177 ms 51176 KB Output is correct
17 Correct 161 ms 51276 KB Output is correct
18 Correct 223 ms 55804 KB Output is correct
19 Correct 19 ms 37800 KB Output is correct
20 Correct 21 ms 37852 KB Output is correct
21 Correct 19 ms 37844 KB Output is correct
22 Correct 19 ms 37852 KB Output is correct
23 Correct 22 ms 37884 KB Output is correct
24 Correct 19 ms 37904 KB Output is correct
25 Correct 22 ms 37880 KB Output is correct
26 Correct 24 ms 37888 KB Output is correct
27 Correct 19 ms 37864 KB Output is correct
28 Correct 22 ms 37844 KB Output is correct
29 Correct 19 ms 37868 KB Output is correct
30 Correct 18 ms 37844 KB Output is correct
31 Correct 20 ms 37844 KB Output is correct
32 Correct 18 ms 37844 KB Output is correct
33 Correct 18 ms 37796 KB Output is correct
34 Correct 20 ms 37844 KB Output is correct
35 Correct 17 ms 37832 KB Output is correct
36 Correct 17 ms 37820 KB Output is correct
37 Correct 21 ms 38016 KB Output is correct
38 Correct 45 ms 42708 KB Output is correct
39 Correct 51 ms 42752 KB Output is correct
40 Correct 47 ms 42780 KB Output is correct
41 Correct 46 ms 42820 KB Output is correct
42 Correct 62 ms 43916 KB Output is correct
43 Correct 61 ms 44796 KB Output is correct
44 Correct 58 ms 44816 KB Output is correct
45 Correct 64 ms 44876 KB Output is correct
46 Correct 60 ms 43928 KB Output is correct
47 Correct 56 ms 44720 KB Output is correct
48 Correct 43 ms 44840 KB Output is correct
49 Correct 45 ms 44872 KB Output is correct
50 Correct 68 ms 45100 KB Output is correct
51 Correct 87 ms 45076 KB Output is correct
52 Correct 61 ms 44400 KB Output is correct
53 Correct 72 ms 45100 KB Output is correct
54 Correct 74 ms 45040 KB Output is correct
55 Correct 62 ms 44400 KB Output is correct
56 Correct 1428 ms 166012 KB Output is correct
57 Correct 1377 ms 165476 KB Output is correct
58 Correct 1633 ms 205768 KB Output is correct
59 Correct 1695 ms 206092 KB Output is correct
60 Correct 1521 ms 181200 KB Output is correct
61 Correct 1601 ms 205752 KB Output is correct
62 Correct 1406 ms 168508 KB Output is correct
63 Correct 1535 ms 222224 KB Output is correct
64 Correct 1447 ms 222196 KB Output is correct
65 Correct 235 ms 63936 KB Output is correct
66 Correct 1481 ms 181192 KB Output is correct
67 Correct 2353 ms 221320 KB Output is correct
68 Correct 1875 ms 222680 KB Output is correct
69 Correct 1489 ms 220600 KB Output is correct
70 Correct 2551 ms 221808 KB Output is correct
71 Correct 2013 ms 222672 KB Output is correct
72 Correct 1526 ms 222732 KB Output is correct
73 Correct 2707 ms 221672 KB Output is correct
74 Correct 1253 ms 222704 KB Output is correct
75 Correct 1076 ms 222820 KB Output is correct
76 Execution timed out 3092 ms 216628 KB Time limit exceeded
77 Halted 0 ms 0 KB -