Submission #3213896


Source Code Expand

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int getint()
{
    int i=0,f=1;char c;
    for(c=getchar();(c!='-')&&(c<'0'||c>'9');c=getchar());
    if(c=='-')c=getchar(),f=-1;
    for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';
    return i*f;
}
const int N=200005,mod=1e9+7;
const ll INF=1e18;
int n,m,A,B,q[N];
ll f[N<<2],g[N<<2],h[N<<2],tag[N<<2];
void add(int k,ll v){if(f[k]!=INF)f[k]+=v,g[k]+=v,h[k]+=v,tag[k]+=v;}
void pushdown(int k){add(k<<1,tag[k]),add(k<<1|1,tag[k]);tag[k]=0;}
void update(int k)
{
    f[k]=min(f[k<<1],f[k<<1|1]);
    g[k]=min(g[k<<1],g[k<<1|1]);
    h[k]=min(h[k<<1],h[k<<1|1]);
}
void build(int k,int l,int r)
{
    f[k]=g[k]=h[k]=INF;
    if(l==r)return;
    int mid=l+r>>1;
    build(k<<1,l,mid),build(k<<1|1,mid+1,r);
}
void chkmin(int k,int l,int r,int p,ll v)
{
    if(l==r)
    {   
        if(v<f[k])f[k]=v,g[k]=v-l,h[k]=v+l;
        return;
    }
    if(tag[k])pushdown(k);
    int mid=l+r>>1;
    p<=mid?chkmin(k<<1,l,mid,p,v):chkmin(k<<1|1,mid+1,r,p,v);
    update(k);
}
ll query(int k,int l,int r,int x,int y,int op)
{
    if(x>y)return INF;
    if(x<=l&&r<=y)return op?h[k]:g[k];
    if(tag[k])pushdown(k);
    int mid=l+r>>1;
    if(y<=mid)return query(k<<1,l,mid,x,y,op);
    else if(x>mid)return query(k<<1|1,mid+1,r,x,y,op);
    else return min(query(k<<1,l,mid,x,mid,op),query(k<<1|1,mid+1,r,mid+1,y,op));
}
int main()
{
    //freopen("lx.in","r",stdin);
    n=getint(),m=getint(),A=getint(),B=getint();
    build(1,1,n);
    for(int i=1;i<=m;i++)q[i]=getint();
    q[0]=B;chkmin(1,1,n,A,0);
    for(int i=1;i<=m;i++)
    {
        ll tmp=min(query(1,1,n,1,q[i],0)+q[i],query(1,1,n,q[i]+1,n,1)-q[i]);
        add(1,abs(q[i]-q[i-1]));chkmin(1,1,n,q[i-1],tmp);
    }
    cout<<f[1]<<'\n';
    return 0;
}

Submission Info

Submission Time
Task F - Many Moves
User yukuai
Language C++14 (GCC 5.4.1)
Score 900
Code Size 1843 Byte
Status AC
Exec Time 169 ms
Memory 25728 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 4
AC × 34
Set Name Test Cases
Sample example0, example1, example2, example3
All example0, example1, example2, example3, flower0, flower1, flower2, flower3, flower4, flower5, flower6, flower7, flower8, flower9, maxrand0, maxrand1, maxrand2, maxrand3, maxrand4, maxrand5, maxrand6, maxrand7, maxrand8, maxrand9, smallrand0, smallrand1, smallrand2, smallrand3, smallrand4, smallrand5, smallrand6, smallrand7, smallrand8, smallrand9
Case Name Status Exec Time Memory
example0 AC 2 ms 6400 KB
example1 AC 2 ms 6400 KB
example2 AC 2 ms 6400 KB
example3 AC 2 ms 6400 KB
flower0 AC 145 ms 25600 KB
flower1 AC 146 ms 25600 KB
flower2 AC 151 ms 25600 KB
flower3 AC 147 ms 25600 KB
flower4 AC 146 ms 25600 KB
flower5 AC 146 ms 25600 KB
flower6 AC 146 ms 25600 KB
flower7 AC 156 ms 25600 KB
flower8 AC 146 ms 25600 KB
flower9 AC 146 ms 25600 KB
maxrand0 AC 156 ms 25600 KB
maxrand1 AC 157 ms 25600 KB
maxrand2 AC 155 ms 25600 KB
maxrand3 AC 155 ms 25600 KB
maxrand4 AC 159 ms 25728 KB
maxrand5 AC 154 ms 25600 KB
maxrand6 AC 154 ms 25600 KB
maxrand7 AC 154 ms 25600 KB
maxrand8 AC 155 ms 25600 KB
maxrand9 AC 169 ms 25600 KB
smallrand0 AC 2 ms 6400 KB
smallrand1 AC 2 ms 6400 KB
smallrand2 AC 2 ms 6400 KB
smallrand3 AC 2 ms 6400 KB
smallrand4 AC 2 ms 6400 KB
smallrand5 AC 2 ms 6400 KB
smallrand6 AC 2 ms 6400 KB
smallrand7 AC 2 ms 6400 KB
smallrand8 AC 2 ms 6400 KB
smallrand9 AC 2 ms 6400 KB