Submission #1437110


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define int long long

struct BIT{
  vector<int> bit;
  int n;
  //1-indexed
  BIT(){init(-1);}
  BIT(int n_){init(n_);}
  void init(int n_){
    n=n_;
    bit.clear();
    bit.resize(n+1,0);
  }
  int sum(int i){
    int s=0;
    while(i>0){
      s+=bit[i];
      i-=i&-i;
    }
    return s;
  }
  void add(int i,int x){
    if(i==0) return;
    while(i<=n){
      bit[i]+=x;
      i+=i&-i;
    }
  }
  int sum0(int i){
    return sum(i+1);
  }
  void add0(int i,int x){
    add(i+1,x);
  }
};

struct StarrySky{
  int n;
  const int def=1LL<<55LL;
  vector<int> datm,data;
  StarrySky(){}
  StarrySky(int n_){init(n_);}
  void init(int n_){
    n=1;
    while(n<n_) n*=2;
    datm.clear();
    datm.resize(n*2-1,def);
    data.clear();
    data.resize(n*2-1,0);
  }
  void add(int a,int b,int x,int k,int l,int r){
    if(r<=a||b<=l) return;
    if(a<=l&&r<=b){
      data[k]+=x;
      return;
    }
    add(a,b,x,k*2+1,l,(l+r)/2);
    add(a,b,x,k*2+2,(l+r)/2,r);
    datm[k]=min(datm[k*2+1]+data[k*2+1],
		datm[k*2+2]+data[k*2+2]);
  }
  int query(int a,int b,int k,int l,int r){
    if(r<=a||b<=l) return def;
    if(a<=l&&r<=b) return datm[k]+data[k];
    int vl=query(a,b,k*2+1,l,(l+r)/2);
    int vr=query(a,b,k*2+2,(l+r)/2,r);
    return min(vl,vr)+data[k];
  }
  void add(int a,int b,int x){
    add(a,b,x,0,0,n);
  }
  int query(int a,int b){
    return query(a,b,0,0,n);
  }
};

signed main(){
  int n,e,t;
  cin>>n>>e>>t;
  int x[n+1];
  for(int i=0;i<n;i++) cin>>x[i];
  x[n]=e;
  
  int dp[n+1];
  int INF=1LL<<55LL;
  fill_n(dp,n+1,INF);
  dp[0]=x[0];

  BIT bit(n+1);
  StarrySky ss(n+1);
  
  for(int i=0;i<n;i++){
    bit.add0(i,-x[i]*2);
    bit.add0(i+1,x[i]*2);
  }
  ss.add(0,1,t-ss.def);
  int k=0,pre=0;
  for(int j=0;j<n;j++){
    bit.add0(0,2*(x[j]-pre));
    ss.add(0,k,2*(x[j]-pre));
    pre=x[j];
    while(k<=j&&bit.sum0(k)>=t){
      ss.add(k,k+1,bit.sum0(k)-t);
      k++;
    }
    /*
    cout<<"bit"<<endl;
    for(int i=0;i<=n;i++)
      cout<<i<<":"<<bit.sum0(i)<<endl;
    cout<<endl;
    cout<<"ss"<<endl;
    for(int i=0;i<=n;i++)
      cout<<i<<":"<<ss.query(i,i+1)<<endl;
    cout<<endl;
    */
    
    int res=ss.query(0,j+1);
    dp[j+1]=res+x[j+1];
    ss.add(j+1,j+2,(res+t)-ss.query(j+1,j+2));
    /*
    cout<<"k:"<<k<<endl;
    cout<<"res:"<<res<<endl;
    cout<<"dp[j+1]:"<<dp[j+1]<<endl;
    cout<<j<<":"<<res<<endl;
    cout<<"----------"<<endl;
    */
  }
  cout<<dp[n]<<endl;
  return 0;
}

Submission Info

Submission Time
Task D - Shik and Game
User beet
Language C++14 (GCC 5.4.1)
Score 1200
Code Size 2623 Byte
Status AC
Exec Time 127 ms
Memory 6656 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 600 / 600 600 / 600
Status
AC × 3
AC × 23
AC × 64
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt
Subtask1 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt, 2_13.txt, 2_14.txt, 2_15.txt, 2_16.txt, 2_17.txt, 2_18.txt, 2_19.txt, 2_20.txt, 2_21.txt, 2_22.txt, 2_23.txt, 2_24.txt, 2_25.txt, 2_26.txt, 2_27.txt, 2_28.txt, 2_29.txt, 2_30.txt, 2_31.txt, 2_32.txt, 2_33.txt, 2_34.txt, 2_35.txt, 2_36.txt, 2_37.txt, 2_38.txt, 2_39.txt, 2_40.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KB
0_01.txt AC 1 ms 256 KB
0_02.txt AC 1 ms 256 KB
1_00.txt AC 3 ms 384 KB
1_01.txt AC 3 ms 384 KB
1_02.txt AC 3 ms 384 KB
1_03.txt AC 3 ms 384 KB
1_04.txt AC 2 ms 384 KB
1_05.txt AC 2 ms 384 KB
1_06.txt AC 2 ms 384 KB
1_07.txt AC 3 ms 384 KB
1_08.txt AC 3 ms 384 KB
1_09.txt AC 2 ms 384 KB
1_10.txt AC 3 ms 384 KB
1_11.txt AC 2 ms 384 KB
1_12.txt AC 2 ms 384 KB
1_13.txt AC 3 ms 384 KB
1_14.txt AC 2 ms 384 KB
1_15.txt AC 2 ms 384 KB
1_16.txt AC 2 ms 384 KB
1_17.txt AC 3 ms 384 KB
1_18.txt AC 2 ms 384 KB
1_19.txt AC 3 ms 384 KB
2_00.txt AC 114 ms 6656 KB
2_01.txt AC 114 ms 6656 KB
2_02.txt AC 114 ms 6656 KB
2_03.txt AC 114 ms 6656 KB
2_04.txt AC 114 ms 6656 KB
2_05.txt AC 115 ms 6656 KB
2_06.txt AC 115 ms 6656 KB
2_07.txt AC 114 ms 6656 KB
2_08.txt AC 115 ms 6656 KB
2_09.txt AC 114 ms 6656 KB
2_10.txt AC 121 ms 6656 KB
2_11.txt AC 122 ms 6656 KB
2_12.txt AC 122 ms 6656 KB
2_13.txt AC 121 ms 6656 KB
2_14.txt AC 121 ms 6656 KB
2_15.txt AC 121 ms 6656 KB
2_16.txt AC 121 ms 6656 KB
2_17.txt AC 121 ms 6656 KB
2_18.txt AC 121 ms 6656 KB
2_19.txt AC 122 ms 6656 KB
2_20.txt AC 122 ms 6656 KB
2_21.txt AC 122 ms 6656 KB
2_22.txt AC 122 ms 6656 KB
2_23.txt AC 123 ms 6656 KB
2_24.txt AC 121 ms 6656 KB
2_25.txt AC 121 ms 6656 KB
2_26.txt AC 121 ms 6656 KB
2_27.txt AC 122 ms 6656 KB
2_28.txt AC 124 ms 6656 KB
2_29.txt AC 121 ms 6656 KB
2_30.txt AC 124 ms 6656 KB
2_31.txt AC 127 ms 6656 KB
2_32.txt AC 120 ms 6656 KB
2_33.txt AC 119 ms 6656 KB
2_34.txt AC 119 ms 6656 KB
2_35.txt AC 118 ms 6656 KB
2_36.txt AC 117 ms 6656 KB
2_37.txt AC 116 ms 6656 KB
2_38.txt AC 113 ms 6656 KB
2_39.txt AC 112 ms 6656 KB
2_40.txt AC 107 ms 6656 KB