Submission #2822090


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
using Int = long long;


struct EulerTour{
  Int n,pos;
  vector<vector<Int> > G;
  vector<Int> ls,rs;
  
  EulerTour(){}
  EulerTour(Int n):n(n),G(n),ls(n),rs(n){}

  void add_edge(Int u,Int v){
    G[u].emplace_back(v);
    G[v].emplace_back(u);
  }

  void dfs(Int v,Int p){
    ls[v]=pos++;
    for(Int u:G[v])
      if(u!=p) dfs(u,v);
    rs[v]=pos;
  }
  
  void build(Int r=0){
    pos=0;
    dfs(r,-1);
  }
  
};


template <typename T,typename E>
struct SegmentTree{
  using F = function<T(T,T)>;
  using G = function<T(T,E)>;
  using H = function<E(E,E)>;
  using P = function<E(E,size_t)>;
  Int n;
  F f;
  G g;
  H h;
  T ti;
  E ei;
  P p;
  vector<T> dat;
  vector<E> laz;
  SegmentTree(Int n_,F f,G g,H h,T ti,E ei,
	      P p=[](E a,size_t b){b++;return a;}):
    f(f),g(g),h(h),ti(ti),ei(ei),p(p){
    init(n_);
  }
  void init(Int n_){
    n=1;
    while(n<n_) n*=2;
    dat.assign(2*n-1,ti);
    laz.assign(2*n-1,ei);
  }
  void build(Int n_, vector<T> v){
    for(Int i=0;i<n_;i++) dat[i+n-1]=v[i];
    for(Int i=n-2;i>=0;i--)
      dat[i]=f(dat[i*2+1],dat[i*2+2]);
  }
  inline void eval(Int len,Int k){
    if(laz[k]==ei) return;
    if(k*2+1<n*2-1){
      laz[k*2+1]=h(laz[k*2+1],laz[k]);
      laz[k*2+2]=h(laz[k*2+2],laz[k]);
    }
    dat[k]=g(dat[k],p(laz[k],len));
    laz[k]=ei;
  }
  T update(Int a,Int b,E x,Int k,Int l,Int r){
    eval(r-l,k);
    if(r<=a||b<=l) return dat[k];
    if(a<=l&&r<=b){
      laz[k]=h(laz[k],x);
      return g(dat[k],p(laz[k],r-l));
    }
    return dat[k]=f(update(a,b,x,k*2+1,l,(l+r)/2),
		    update(a,b,x,k*2+2,(l+r)/2,r));
  }
  T update(Int a,Int b,E x){
    return update(a,b,x,0,0,n);
  }
  T query(Int a,Int b,Int k,Int l,Int r){
    eval(r-l,k);
    if(r<=a||b<=l) return ti;
    if(a<=l&&r<=b) return dat[k];
    T vl=query(a,b,k*2+1,l,(l+r)/2);
    T vr=query(a,b,k*2+2,(l+r)/2,r);
    return f(vl,vr);
  }
  T query(Int a,Int b){
    return query(a,b,0,0,n);
  }
  void update(Int k,T x){
    query(k,k+1);//evaluate
    k+=n-1;
    dat[k]=x;
    while(k){
      k=(k-1)/2;
      dat[k]=f(dat[k*2+1],dat[k*2+2]);
    }
  }
};

//INSERT ABOVE HERE
signed main(){
  Int n;
  cin>>n;
  vector<string> a(n);
  vector<Int> b(n);
  for(Int i=0;i<n;i++) cin>>a[i]>>b[i];

  vector<vector<Int> > G(1);
  vector<map<char, Int> > M(1);
  for(Int i=0;i<n;i++){
    reverse(a[i].begin(),a[i].end());
    Int pos=0;
    for(Int j=0;j<(Int)a[i].size();j++){
      if(!M[pos].count(a[i][j])){
	M[pos][a[i][j]]=G.size();
	G[pos].emplace_back(M[pos][a[i][j]]);
	G.emplace_back();
	M.emplace_back();
      }
      pos=M[pos][a[i][j]];
    }
  }

  EulerTour et(G.size());
  for(Int i=0;i<(Int)G.size();i++)
    for(Int u:G[i]) et.add_edge(i,u);
  et.build();

  auto f=[](Int a,Int b){return max(a,b);};
  auto g=[](Int a,Int b){return a+b;};
  SegmentTree<Int, Int> seg(G.size(),f,g,g,0,0);
  
  for(Int i=0;i<n;i++){
    Int pos=0;
    for(Int j=0;j<(Int)a[i].size();j++)
      pos=M[pos][a[i][j]];

    seg.update(et.ls[pos],et.rs[pos],b[i]);
    cout<<seg.query(0,G.size())<<endl;
  }
  
  return 0;
}

Submission Info

Submission Time
Task E - 宝くじ
User beet
Language C++14 (GCC 5.4.1)
Score 200
Code Size 3260 Byte
Status AC
Exec Time 797 ms
Memory 145740 KB

Judge Result

Set Name All
Score / Max Score 200 / 200
Status
AC × 25
Set Name Test Cases
All scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt
Case Name Status Exec Time Memory
scrambled_00.txt AC 1 ms 256 KB
scrambled_01.txt AC 1 ms 256 KB
scrambled_02.txt AC 304 ms 9472 KB
scrambled_03.txt AC 263 ms 8320 KB
scrambled_04.txt AC 305 ms 9472 KB
scrambled_05.txt AC 207 ms 6016 KB
scrambled_06.txt AC 249 ms 7168 KB
scrambled_07.txt AC 75 ms 2432 KB
scrambled_08.txt AC 130 ms 4096 KB
scrambled_09.txt AC 290 ms 8064 KB
scrambled_10.txt AC 236 ms 6912 KB
scrambled_11.txt AC 75 ms 2304 KB
scrambled_12.txt AC 236 ms 6656 KB
scrambled_13.txt AC 55 ms 1792 KB
scrambled_14.txt AC 545 ms 65364 KB
scrambled_15.txt AC 21 ms 3700 KB
scrambled_16.txt AC 554 ms 64212 KB
scrambled_17.txt AC 74 ms 11876 KB
scrambled_18.txt AC 506 ms 61780 KB
scrambled_19.txt AC 700 ms 145740 KB
scrambled_20.txt AC 797 ms 133580 KB
scrambled_21.txt AC 479 ms 94284 KB
scrambled_22.txt AC 481 ms 92108 KB
scrambled_23.txt AC 90 ms 22620 KB
scrambled_24.txt AC 203 ms 45012 KB