답안 #674992

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
674992 2022-12-26T18:30:12 Z urosk 치료 계획 (JOI20_treatment) C++14
39 / 100
1346 ms 508868 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 500005
ll n,m;
struct tupl{
    ll t,l,r,c;
} a[maxn];
ll tsz = 1,tsz2 = 1;
int ls[maxx],rs[maxx];
int ls2[maxx],rs2[maxx];
set<pair<int,int> > t[maxx],t2[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){
        if(!ls[v]) ls[v] = ++tsz;
        upd(ls[v],tl,mid,i,p,f);
    }else{
        if(!rs[v]) rs[v] = ++tsz;
        upd(rs[v],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){
        if(!ls2[v]) ls2[v] = ++tsz2;
        upd2(ls2[v],tl,mid,i,p,f);
    }else{
        if(!rs2[v]) rs2[v] = ++tsz2;
        upd2(rs2[v],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;
    if(ls[v]) get(ls[v],tl,mid,l,min(mid,r),x);
    if(rs[v]) get(rs[v],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;
    if(ls2[v]) get2(ls2[v],tl,mid,l,min(mid,r),x);
    if(rs2[v]) get2(rs2[v],mid+1,tr,max(mid+1,l),r,x);
}
ll d[maxn];
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--;
    ll mxt = 0;
    for(ll i = 1;i<=n;i++) mxt = max(mxt,a[i].t);
    for(ll i = 1;i<=n;i++){
        if(a[i].l==0) continue;
        upd(1,1,mxt,a[i].t,{a[i].l+a[i].t,i},1);
        upd2(1,1,mxt,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,a[i].t,mxt,a[i].r+a[i].t);
        get2(1,1,mxt,1,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,a[j].t,{a[j].l+a[j].t,j},0);
            upd2(1,1,mxt,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 128 ms 41792 KB Output is correct
2 Correct 116 ms 41784 KB Output is correct
3 Correct 115 ms 40628 KB Output is correct
4 Correct 119 ms 40592 KB Output is correct
5 Correct 123 ms 44052 KB Output is correct
6 Correct 112 ms 42064 KB Output is correct
7 Correct 101 ms 41848 KB Output is correct
8 Correct 88 ms 41780 KB Output is correct
9 Correct 79 ms 41840 KB Output is correct
10 Correct 70 ms 41724 KB Output is correct
11 Correct 227 ms 47352 KB Output is correct
12 Correct 215 ms 45120 KB Output is correct
13 Correct 185 ms 43992 KB Output is correct
14 Correct 188 ms 44184 KB Output is correct
15 Correct 160 ms 41828 KB Output is correct
16 Correct 158 ms 41864 KB Output is correct
17 Correct 159 ms 41984 KB Output is correct
18 Correct 212 ms 46364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 28520 KB Output is correct
2 Correct 13 ms 28572 KB Output is correct
3 Correct 14 ms 28500 KB Output is correct
4 Correct 13 ms 28520 KB Output is correct
5 Correct 13 ms 28500 KB Output is correct
6 Correct 14 ms 28568 KB Output is correct
7 Correct 13 ms 28500 KB Output is correct
8 Correct 14 ms 28500 KB Output is correct
9 Correct 14 ms 28500 KB Output is correct
10 Correct 16 ms 28548 KB Output is correct
11 Correct 15 ms 28500 KB Output is correct
12 Correct 14 ms 28516 KB Output is correct
13 Correct 14 ms 28592 KB Output is correct
14 Correct 13 ms 28500 KB Output is correct
15 Correct 14 ms 28500 KB Output is correct
16 Correct 14 ms 28552 KB Output is correct
17 Correct 13 ms 28440 KB Output is correct
18 Correct 16 ms 28500 KB Output is correct
19 Correct 14 ms 28500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 28520 KB Output is correct
2 Correct 13 ms 28572 KB Output is correct
3 Correct 14 ms 28500 KB Output is correct
4 Correct 13 ms 28520 KB Output is correct
5 Correct 13 ms 28500 KB Output is correct
6 Correct 14 ms 28568 KB Output is correct
7 Correct 13 ms 28500 KB Output is correct
8 Correct 14 ms 28500 KB Output is correct
9 Correct 14 ms 28500 KB Output is correct
10 Correct 16 ms 28548 KB Output is correct
11 Correct 15 ms 28500 KB Output is correct
12 Correct 14 ms 28516 KB Output is correct
13 Correct 14 ms 28592 KB Output is correct
14 Correct 13 ms 28500 KB Output is correct
15 Correct 14 ms 28500 KB Output is correct
16 Correct 14 ms 28552 KB Output is correct
17 Correct 13 ms 28440 KB Output is correct
18 Correct 16 ms 28500 KB Output is correct
19 Correct 14 ms 28500 KB Output is correct
20 Correct 39 ms 33256 KB Output is correct
21 Correct 38 ms 33220 KB Output is correct
22 Correct 79 ms 43392 KB Output is correct
23 Correct 74 ms 43452 KB Output is correct
24 Correct 76 ms 42192 KB Output is correct
25 Correct 77 ms 44196 KB Output is correct
26 Correct 90 ms 44060 KB Output is correct
27 Correct 75 ms 43688 KB Output is correct
28 Correct 74 ms 42140 KB Output is correct
29 Correct 72 ms 44080 KB Output is correct
30 Correct 56 ms 43820 KB Output is correct
31 Correct 62 ms 43592 KB Output is correct
32 Correct 92 ms 44816 KB Output is correct
33 Correct 80 ms 39444 KB Output is correct
34 Correct 51 ms 35060 KB Output is correct
35 Correct 99 ms 44932 KB Output is correct
36 Correct 77 ms 39512 KB Output is correct
37 Correct 53 ms 35096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 128 ms 41792 KB Output is correct
2 Correct 116 ms 41784 KB Output is correct
3 Correct 115 ms 40628 KB Output is correct
4 Correct 119 ms 40592 KB Output is correct
5 Correct 123 ms 44052 KB Output is correct
6 Correct 112 ms 42064 KB Output is correct
7 Correct 101 ms 41848 KB Output is correct
8 Correct 88 ms 41780 KB Output is correct
9 Correct 79 ms 41840 KB Output is correct
10 Correct 70 ms 41724 KB Output is correct
11 Correct 227 ms 47352 KB Output is correct
12 Correct 215 ms 45120 KB Output is correct
13 Correct 185 ms 43992 KB Output is correct
14 Correct 188 ms 44184 KB Output is correct
15 Correct 160 ms 41828 KB Output is correct
16 Correct 158 ms 41864 KB Output is correct
17 Correct 159 ms 41984 KB Output is correct
18 Correct 212 ms 46364 KB Output is correct
19 Correct 14 ms 28520 KB Output is correct
20 Correct 13 ms 28572 KB Output is correct
21 Correct 14 ms 28500 KB Output is correct
22 Correct 13 ms 28520 KB Output is correct
23 Correct 13 ms 28500 KB Output is correct
24 Correct 14 ms 28568 KB Output is correct
25 Correct 13 ms 28500 KB Output is correct
26 Correct 14 ms 28500 KB Output is correct
27 Correct 14 ms 28500 KB Output is correct
28 Correct 16 ms 28548 KB Output is correct
29 Correct 15 ms 28500 KB Output is correct
30 Correct 14 ms 28516 KB Output is correct
31 Correct 14 ms 28592 KB Output is correct
32 Correct 13 ms 28500 KB Output is correct
33 Correct 14 ms 28500 KB Output is correct
34 Correct 14 ms 28552 KB Output is correct
35 Correct 13 ms 28440 KB Output is correct
36 Correct 16 ms 28500 KB Output is correct
37 Correct 14 ms 28500 KB Output is correct
38 Correct 39 ms 33256 KB Output is correct
39 Correct 38 ms 33220 KB Output is correct
40 Correct 79 ms 43392 KB Output is correct
41 Correct 74 ms 43452 KB Output is correct
42 Correct 76 ms 42192 KB Output is correct
43 Correct 77 ms 44196 KB Output is correct
44 Correct 90 ms 44060 KB Output is correct
45 Correct 75 ms 43688 KB Output is correct
46 Correct 74 ms 42140 KB Output is correct
47 Correct 72 ms 44080 KB Output is correct
48 Correct 56 ms 43820 KB Output is correct
49 Correct 62 ms 43592 KB Output is correct
50 Correct 92 ms 44816 KB Output is correct
51 Correct 80 ms 39444 KB Output is correct
52 Correct 51 ms 35060 KB Output is correct
53 Correct 99 ms 44932 KB Output is correct
54 Correct 77 ms 39512 KB Output is correct
55 Correct 53 ms 35096 KB Output is correct
56 Correct 1273 ms 152724 KB Output is correct
57 Runtime error 1346 ms 508868 KB Execution killed with signal 11
58 Halted 0 ms 0 KB -