Submission #674982

# Submission time Handle Problem Language Result Execution time Memory
674982 2022-12-26T18:24:48 Z urosk Treatment Project (JOI20_treatment) C++14
39 / 100
2213 ms 524288 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 5000005
ll n,m;
struct tupl{
    ll t,l,r,c;
} a[maxn];
ll tsz = 1,tsz2 = 1;
ll ls[maxx],rs[maxx];
ll ls2[maxx],rs2[maxx];
set<pll> 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++){
        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});
            upd(1,1,mxt,a[i].t,{a[i].l+a[i].t,i},0);
            upd2(1,1,mxt,a[i].t,{a[i].l-a[i].t,i},0);
        }
    }
    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;
}
# Verdict Execution time Memory Grader output
1 Correct 220 ms 259516 KB Output is correct
2 Correct 215 ms 259592 KB Output is correct
3 Correct 224 ms 259568 KB Output is correct
4 Correct 226 ms 259568 KB Output is correct
5 Correct 220 ms 261592 KB Output is correct
6 Correct 199 ms 259524 KB Output is correct
7 Correct 199 ms 259408 KB Output is correct
8 Correct 186 ms 259344 KB Output is correct
9 Correct 177 ms 259264 KB Output is correct
10 Correct 181 ms 259352 KB Output is correct
11 Correct 327 ms 265024 KB Output is correct
12 Correct 317 ms 262752 KB Output is correct
13 Correct 297 ms 261536 KB Output is correct
14 Correct 274 ms 261460 KB Output is correct
15 Correct 256 ms 259340 KB Output is correct
16 Correct 257 ms 259528 KB Output is correct
17 Correct 254 ms 258640 KB Output is correct
18 Correct 313 ms 263264 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 101 ms 239820 KB Output is correct
2 Correct 101 ms 239872 KB Output is correct
3 Correct 100 ms 239932 KB Output is correct
4 Correct 101 ms 239820 KB Output is correct
5 Correct 104 ms 239952 KB Output is correct
6 Correct 100 ms 239848 KB Output is correct
7 Correct 101 ms 239952 KB Output is correct
8 Correct 104 ms 240076 KB Output is correct
9 Correct 102 ms 239948 KB Output is correct
10 Correct 116 ms 239908 KB Output is correct
11 Correct 102 ms 239844 KB Output is correct
12 Correct 100 ms 239836 KB Output is correct
13 Correct 105 ms 240012 KB Output is correct
14 Correct 103 ms 239872 KB Output is correct
15 Correct 103 ms 239884 KB Output is correct
16 Correct 102 ms 239820 KB Output is correct
17 Correct 118 ms 239888 KB Output is correct
18 Correct 113 ms 239828 KB Output is correct
19 Correct 107 ms 239888 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 101 ms 239820 KB Output is correct
2 Correct 101 ms 239872 KB Output is correct
3 Correct 100 ms 239932 KB Output is correct
4 Correct 101 ms 239820 KB Output is correct
5 Correct 104 ms 239952 KB Output is correct
6 Correct 100 ms 239848 KB Output is correct
7 Correct 101 ms 239952 KB Output is correct
8 Correct 104 ms 240076 KB Output is correct
9 Correct 102 ms 239948 KB Output is correct
10 Correct 116 ms 239908 KB Output is correct
11 Correct 102 ms 239844 KB Output is correct
12 Correct 100 ms 239836 KB Output is correct
13 Correct 105 ms 240012 KB Output is correct
14 Correct 103 ms 239872 KB Output is correct
15 Correct 103 ms 239884 KB Output is correct
16 Correct 102 ms 239820 KB Output is correct
17 Correct 118 ms 239888 KB Output is correct
18 Correct 113 ms 239828 KB Output is correct
19 Correct 107 ms 239888 KB Output is correct
20 Correct 166 ms 248120 KB Output is correct
21 Correct 142 ms 248088 KB Output is correct
22 Correct 170 ms 259924 KB Output is correct
23 Correct 164 ms 259968 KB Output is correct
24 Correct 179 ms 262664 KB Output is correct
25 Correct 185 ms 262008 KB Output is correct
26 Correct 168 ms 261156 KB Output is correct
27 Correct 163 ms 260416 KB Output is correct
28 Correct 187 ms 262644 KB Output is correct
29 Correct 168 ms 262004 KB Output is correct
30 Correct 150 ms 261056 KB Output is correct
31 Correct 156 ms 260320 KB Output is correct
32 Correct 189 ms 262620 KB Output is correct
33 Correct 166 ms 254904 KB Output is correct
34 Correct 157 ms 248764 KB Output is correct
35 Correct 189 ms 262572 KB Output is correct
36 Correct 180 ms 254832 KB Output is correct
37 Correct 152 ms 248920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 220 ms 259516 KB Output is correct
2 Correct 215 ms 259592 KB Output is correct
3 Correct 224 ms 259568 KB Output is correct
4 Correct 226 ms 259568 KB Output is correct
5 Correct 220 ms 261592 KB Output is correct
6 Correct 199 ms 259524 KB Output is correct
7 Correct 199 ms 259408 KB Output is correct
8 Correct 186 ms 259344 KB Output is correct
9 Correct 177 ms 259264 KB Output is correct
10 Correct 181 ms 259352 KB Output is correct
11 Correct 327 ms 265024 KB Output is correct
12 Correct 317 ms 262752 KB Output is correct
13 Correct 297 ms 261536 KB Output is correct
14 Correct 274 ms 261460 KB Output is correct
15 Correct 256 ms 259340 KB Output is correct
16 Correct 257 ms 259528 KB Output is correct
17 Correct 254 ms 258640 KB Output is correct
18 Correct 313 ms 263264 KB Output is correct
19 Correct 101 ms 239820 KB Output is correct
20 Correct 101 ms 239872 KB Output is correct
21 Correct 100 ms 239932 KB Output is correct
22 Correct 101 ms 239820 KB Output is correct
23 Correct 104 ms 239952 KB Output is correct
24 Correct 100 ms 239848 KB Output is correct
25 Correct 101 ms 239952 KB Output is correct
26 Correct 104 ms 240076 KB Output is correct
27 Correct 102 ms 239948 KB Output is correct
28 Correct 116 ms 239908 KB Output is correct
29 Correct 102 ms 239844 KB Output is correct
30 Correct 100 ms 239836 KB Output is correct
31 Correct 105 ms 240012 KB Output is correct
32 Correct 103 ms 239872 KB Output is correct
33 Correct 103 ms 239884 KB Output is correct
34 Correct 102 ms 239820 KB Output is correct
35 Correct 118 ms 239888 KB Output is correct
36 Correct 113 ms 239828 KB Output is correct
37 Correct 107 ms 239888 KB Output is correct
38 Correct 166 ms 248120 KB Output is correct
39 Correct 142 ms 248088 KB Output is correct
40 Correct 170 ms 259924 KB Output is correct
41 Correct 164 ms 259968 KB Output is correct
42 Correct 179 ms 262664 KB Output is correct
43 Correct 185 ms 262008 KB Output is correct
44 Correct 168 ms 261156 KB Output is correct
45 Correct 163 ms 260416 KB Output is correct
46 Correct 187 ms 262644 KB Output is correct
47 Correct 168 ms 262004 KB Output is correct
48 Correct 150 ms 261056 KB Output is correct
49 Correct 156 ms 260320 KB Output is correct
50 Correct 189 ms 262620 KB Output is correct
51 Correct 166 ms 254904 KB Output is correct
52 Correct 157 ms 248764 KB Output is correct
53 Correct 189 ms 262572 KB Output is correct
54 Correct 180 ms 254832 KB Output is correct
55 Correct 152 ms 248920 KB Output is correct
56 Correct 2213 ms 459548 KB Output is correct
57 Runtime error 1296 ms 524288 KB Execution killed with signal 9
58 Halted 0 ms 0 KB -