Submission #754884

# Submission time Handle Problem Language Result Execution time Memory
754884 2023-06-08T20:06:17 Z alexander707070 Roller Coaster Railroad (IOI16_railroad) C++14
30 / 100
177 ms 9548 KB
#include <bits/stdc++.h>
 
using namespace std;

const long long inf=1e15;
 
int n,fullmask;
pair<long long,long long> a[200007];
int ind[200007],curr;
 
bool cmp(int x,int y){
    return a[x].second>a[y].second;
}

int tree[4*200007],pos,cnt;

void build(int v,int l,int r){
    if(l==r){
        tree[v]=l;
    }else{
        int tt=(l+r)/2;
        build(2*v,l,tt);
        build(2*v+1,tt+1,r);
        tree[v]=l;
    }
}

void update(int v,int l,int r,int pos){
    if(l==r){
        tree[v]=n+1;
    }else{
        int tt=(l+r)/2;
        if(pos<=tt)update(2*v,l,tt,pos);
        else update(2*v+1,tt+1,r,pos);
        tree[v]=min(tree[2*v],tree[2*v+1]);
    }
}

int getmin(int v,int l,int r,int ll,int rr){
    if(ll>rr)return n+1;
    if(l==ll and r==rr){
        return tree[v];
    }else{
        int tt=(l+r)/2;
        return min( getmin(2*v,l,tt,ll,min(tt,rr)) , getmin(2*v+1,tt+1,r,max(tt+1,ll),rr) );
    }
}

long long dp[17][65536];
bool li[17][65536];

long long ff(int last,int mask){
    if(mask==fullmask)return 0;

    if(li[last][mask])return dp[last][mask];
    li[last][mask]=true;
    dp[last][mask]=inf;

    for(int i=0;i<n;i++){
        if(((1<<i)&mask)>0)continue;
        dp[last][mask]=min(dp[last][mask],ff(i,mask|(1<<i))+max(a[i+1].second-a[last].first,0LL));
    }

    return dp[last][mask];
}

long long plan_roller_coaster(vector<int> s,vector<int> t){

    n=s.size();
    for(int i=1;i<=n;i++){
        a[i]={s[i-1],t[i-1]};
        ind[i]=i;
    }

    if(n<=16){
        fullmask=(1<<n)-1;
        a[n].first=inf;
        return ff(n,0);
    }

    sort(a+1,a+n+1);
    sort(ind+1,ind+n+1,cmp);
    build(1,1,n);

    for(int i=1;i<=n;i++){
        curr=ind[i];
        int l=0,r=n+1,tt;
        while(l+1<r){
            tt=(l+r)/2;
            if(a[curr].second<=a[tt].first){
                r=tt;
            }else{
                l=tt;
            }
        }
        pos=getmin(1,1,n,r,n);
        if(pos==curr)pos=getmin(1,1,n,pos+1,n);

        if(pos==n+1)cnt++;
        else update(1,1,n,pos);
    }

    if(cnt>1)return 1;

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB n = 2
2 Correct 0 ms 340 KB n = 2
3 Correct 0 ms 340 KB n = 2
4 Correct 0 ms 340 KB n = 2
5 Correct 0 ms 340 KB n = 2
6 Incorrect 0 ms 340 KB answer is not correct: 592737449 instead of 523688153
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB n = 2
2 Correct 0 ms 340 KB n = 2
3 Correct 0 ms 340 KB n = 2
4 Correct 0 ms 340 KB n = 2
5 Correct 0 ms 340 KB n = 2
6 Incorrect 0 ms 340 KB answer is not correct: 592737449 instead of 523688153
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 136 ms 9548 KB n = 199999
2 Correct 151 ms 9408 KB n = 199991
3 Correct 123 ms 9404 KB n = 199993
4 Correct 100 ms 7752 KB n = 152076
5 Correct 68 ms 4760 KB n = 93249
6 Correct 177 ms 9292 KB n = 199910
7 Correct 119 ms 9284 KB n = 199999
8 Correct 124 ms 9300 KB n = 199997
9 Correct 124 ms 8400 KB n = 171294
10 Correct 97 ms 7340 KB n = 140872
11 Correct 124 ms 9408 KB n = 199886
12 Correct 121 ms 9292 KB n = 199996
13 Correct 123 ms 9428 KB n = 200000
14 Correct 150 ms 9292 KB n = 199998
15 Correct 130 ms 9408 KB n = 200000
16 Correct 125 ms 9304 KB n = 199998
17 Correct 74 ms 9304 KB n = 200000
18 Correct 147 ms 9072 KB n = 190000
19 Correct 80 ms 8632 KB n = 177777
20 Correct 72 ms 4856 KB n = 100000
21 Correct 154 ms 9288 KB n = 200000
22 Correct 167 ms 9524 KB n = 200000
23 Correct 150 ms 9416 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB n = 2
2 Correct 0 ms 340 KB n = 2
3 Correct 0 ms 340 KB n = 2
4 Correct 0 ms 340 KB n = 2
5 Correct 0 ms 340 KB n = 2
6 Incorrect 0 ms 340 KB answer is not correct: 592737449 instead of 523688153
7 Halted 0 ms 0 KB -