/* 7 5 6 9 11 12 16 20 2 3 1 5 3 1 1 _____ _ _ _ _ |_ _| |__ ___ / \ _ __ ___| |__ _ _| | | | | '_ \ / _ \ / _ \ | '_ \/ __| '_ \| | | | | | | | | | | __// ___ \| | | \__ \ | | | |_| | | |_| |_| |_|\___/_/ \_\_| |_|___/_| |_|\__,_|_| */ #include #define ll long long #define pb push_back #define ppb pop_back #define endl '\n' #define mii map #define msi map #define mis map #define rep(i,a,b) for(ll int i=a;i,ll int> #define pii pair #define vi vector #define vii vector> #define vs vector #define all(a) (a).begin(),(a).end() #define F first #define S second #define sz(x) (ll int)x.size() #define hell 1000000007 #define lbnd lower_bound #define ubnd upper_bound #define bs binary_search #define mp make_pair #define what_is(x) cerr << #x << " is " << x << endl; #define time cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n"; using namespace std; #define N 100005 ll n,l,r; vi a(N),seg(4*N); void build(ll cur,ll st,ll end) { if(st==end) { seg[cur]=a[st]; return; } ll mid=(st+end)>>1; build(2*cur,st,mid); build(2*cur+1,mid+1,end); seg[cur]=max(seg[2*cur],seg[2*cur+1]); /* 1-change here */ } ll query(ll cur,ll st,ll end,ll l,ll r) { if(l<=st&&r>=end) return seg[cur]; if(rend) return 0; /* 2-change here */ ll mid=(st+end)>>1; ll ans1=query(2*cur,st,mid,l,r); ll ans2=query(2*cur+1,mid+1,end,l,r); return max(ans1,ans2); /* 3-change here */ } void update(ll cur,ll st,ll end,ll pos,ll upd) { if(st==end) { a[pos]=upd; /* 4-change here */ seg[cur]=upd; /* 5-change here */ return; } ll mid=(st+end)>>1; if(st<=pos&&pos<=mid) update(2*cur,st,mid,pos,upd); else update(2*cur+1,mid+1,end,pos,upd); seg[cur]=max(seg[2*cur],seg[2*cur+1]); /* 6-change here */ } void solve() { ll n; cin>>n; vi aa(n),b(n); setst; rep(i,0,n) { cin>>aa[i]; st.insert(aa[i]); } rep(i,0,n) { cin>>b[i]; } vi ans(n); for(ll i=n-1;i>=0;i--) { ll p=ubnd(all(aa),aa[i]+b[i])-aa.begin(); if(p==i+1) { ans[i]=aa[i]+b[i]; } else { ans[i]=max(query(1,1,n,i+2,p),aa[i]+b[i]); } update(1,1,n,i+1,ans[i]); } rep(i,1,n+1) cout<>TESTS; while(TESTS--) { solve(); } time return 0; }