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 |
|
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 |