답안 #254615

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
254615 2020-07-30T10:39:02 Z IloveN Shortcut (IOI16_shortcut) C++14
0 / 100
1 ms 384 KB
#include<bits/stdc++.h>
#include "shortcut.h"

using namespace std;
#define ll long long
#define pb push_back
#define eb emplace_back
#define all(vr) vr.begin(),vr.end()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define mp make_pair
const int N=1e6+10;
const ll inf=1e18;
ll p[N],val[N],n,c,ps[N],ss[N],best_ps[N],best_ss[N];

ll cal(int l,int r)
{
    ll res=max(ps[l],ss[r]);
    ll dis=p[r]-p[l]+c;
    ll tmp1=val[l],tmp2=val[r];
    val[l]=best_ps[l]+p[l];
    val[r]=best_ss[r]+(p[n]-p[r]);
    deque<int> q;
    q.push_front(l);
    ll best=-inf;
    for (int i=l+1;i<=r;i++)
    {
        while (!q.empty() && p[i]-p[q.back()]>dis/2)
        {
            best=max(best,p[q.back()]+val[q.back()]);
            q.pop_back();
        }
        res=max(res,dis-p[i]+best+val[i]);
        if (!q.empty()) res=max(res,p[i]+val[i]-p[q.back()]+val[q.back()]);
        while (!q.empty() && -p[i]+val[i]>=-p[q.front()]+val[q.front()]) q.pop_front();
        q.push_front(i);
    }
    val[l]=tmp1,val[r]=tmp2;
    return res;
}

void build()
{
    for (int i=1;i<=n;i++)
    {
        ps[i]=max(ps[i-1],p[i]+val[i]+best_ps[i-1]);
        best_ps[i]=max(best_ps[i-1],-p[i]+val[i]);
    }
    for (int i=n;i;i--)
    {
        ss[i]=max(ss[i+1],p[n]-p[i]+val[i]+best_ss[i+1]);
        best_ss[i]=max(best_ss[i+1],-(p[n]-p[i])+val[i]);
    }
}

int lef(int x,int d, ll val,int l,int r)
{
    int ans=d;
    while (l<=r)
    {
        int mid=(l+r)/2;
        if (cal(x,mid)==val) ans=mid,r=mid-1;
        else l=mid+1;
    }
    return ans;
}

int rig(int x,int d, ll val,int l,int r)
{
    int ans=d;
    while (l<=r)
    {
        int mid=(l+r)/2;
        if (cal(x,mid)==val) ans=mid,l=mid+1;
        else r=mid-1;
    }
    return ans;
}

ll best_r(int x)
{
    int l=x+1,r=n;
    ll ans=inf;
    while (l<=r)
    {
        int mid=(l+r)/2;
        ll v=cal(x,mid);
        ans=min(ans,v);
        int l2=lef(x,mid,v,l,mid-1),r2=rig(x,mid,v,mid+1,r);
        if (l2>l)
        {
            ll vl=cal(x,l2-1);
            if (vl<v)
            {
                ans=min(ans,vl);
                r=l2-2;
                continue;
            }
        }
        if (r2<r)
        {
            ll vr=cal(x,r2+1);
            if (vr<v)
            {
                ans=min(ans,vr);
                l=r2+2;
                continue;
            }
        }
        break;
    }
    return ans;
}

ll best()
{
    ll ans=inf;
    /*int l=1,r=n;
    while (l<=r)
    {
        int mid1=(l*2+r)/3,mid2=(l+r*2)/3;
        ll val1=best_r(mid1),val2=best_r(mid2);
        if (val1<val2) r=val2-1,ans=min(ans,val1);
        else l=val1+1,ans=min(ans,val2);
    }*/
    /*for (int l=1;l<n;l++)
        for (int r=l+1;r<=n;r++) ans=min(ans,cal(l,r));*/
    int r=2;
    for (int l=1;l<n;l++)
    {
        r=max(r,l+1);
        ll res=cal(l,r);
        int new_r=rig(l,r,res,r+1,n)+1;
        if (new_r>n)
        {
            ans=min(ans,res);
            continue;
        }
        ll new_res=cal(l,new_r);
        while (new_res<res)
        {
            res=new_res;
            r=new_r;
            new_r=rig(l,r,res,r+1,n)+1;
            if (new_r>n) break;
            new_res=cal(l,new_r);
        }
        ans=min(ans,res);
    }
    //for (int i=1;i<n;i++) ans=min(ans,best_r(i));
    return ans;
}

ll find_shortcut(int x,vector<int> l,vector<int> d,int y)
{
    n=x;
    c=y;
    val[1]=d[0];
    for (int i=2;i<=n;i++) p[i]=p[i-1]+l[i-2],val[i]=d[i-1];
    build();
    return best();
}

/*void read()
{
    cin>>n>>c;
    for (int i=2,x;i<=n;i++) cin>>x,p[i]=p[i-1]+x;
    for (int i=1;i<=n;i++) cin>>val[i];
}

int main()
{
    freopen("ss.inp","r",stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    read();
    build();
    cout<<best();
    return 0;
}*/
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 4, 80 is a correct answer
2 Correct 0 ms 384 KB n = 9, 110 is a correct answer
3 Correct 0 ms 384 KB n = 4, 21 is a correct answer
4 Correct 1 ms 384 KB n = 3, 4 is a correct answer
5 Correct 1 ms 384 KB n = 2, 62 is a correct answer
6 Correct 0 ms 384 KB n = 2, 3 is a correct answer
7 Correct 0 ms 384 KB n = 3, 29 is a correct answer
8 Correct 0 ms 384 KB n = 2, 3 is a correct answer
9 Correct 1 ms 384 KB n = 2, 3 is a correct answer
10 Correct 0 ms 384 KB n = 2, 2000000001 is a correct answer
11 Correct 0 ms 384 KB n = 2, 3000000000 is a correct answer
12 Correct 0 ms 384 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 384 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 384 KB n = 4, 3000000001 is a correct answer
15 Correct 0 ms 384 KB n = 4, 4000000000 is a correct answer
16 Correct 0 ms 384 KB n = 5, 4000000000 is a correct answer
17 Correct 0 ms 384 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 384 KB n = 10, 3189 is a correct answer
19 Correct 0 ms 384 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 384 KB n = 5, 12 is a correct answer
21 Correct 1 ms 384 KB n = 5, 25 is a correct answer
22 Correct 1 ms 384 KB n = 2, 122 is a correct answer
23 Correct 0 ms 384 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 384 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -