Submission #754882

# Submission time Handle Problem Language Result Execution time Memory
754882 2023-06-08T20:02:51 Z alexander707070 Roller Coaster Railroad (IOI16_railroad) C++14
30 / 100
160 ms 9524 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|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,n);
    }

    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 Incorrect 0 ms 340 KB answer is not correct: 1000000000000000 instead of 0
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 340 KB answer is not correct: 1000000000000000 instead of 0
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 155 ms 9408 KB n = 199999
2 Correct 150 ms 9416 KB n = 199991
3 Correct 141 ms 9288 KB n = 199993
4 Correct 113 ms 7724 KB n = 152076
5 Correct 75 ms 4648 KB n = 93249
6 Correct 132 ms 9288 KB n = 199910
7 Correct 118 ms 9416 KB n = 199999
8 Correct 119 ms 9524 KB n = 199997
9 Correct 123 ms 8444 KB n = 171294
10 Correct 98 ms 7324 KB n = 140872
11 Correct 127 ms 9432 KB n = 199886
12 Correct 124 ms 9412 KB n = 199996
13 Correct 132 ms 9404 KB n = 200000
14 Correct 122 ms 9284 KB n = 199998
15 Correct 126 ms 9304 KB n = 200000
16 Correct 121 ms 9416 KB n = 199998
17 Correct 71 ms 9404 KB n = 200000
18 Correct 158 ms 9056 KB n = 190000
19 Correct 80 ms 8640 KB n = 177777
20 Correct 70 ms 5012 KB n = 100000
21 Correct 160 ms 9296 KB n = 200000
22 Correct 155 ms 9428 KB n = 200000
23 Correct 143 ms 9424 KB n = 200000
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 340 KB answer is not correct: 1000000000000000 instead of 0
2 Halted 0 ms 0 KB -