Submission #1181940

#TimeUsernameProblemLanguageResultExecution timeMemory
1181940user736482Modern Machine (JOI23_ho_t5)C++20
37 / 100
722 ms109572 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pb push_back #define ff first #define ss second #define MOD 1000000009 #define INF 1000000019 #define POT (1<<18) #define INFL 100000000099 ll n,q,t,a,b,c,ans,k,e,m,h,w,u,pier; vector<ll>kras; string s; vector<pair<pair<ll,ll>,ll>>sgtree[POT]; ll policz(ll ak,ll pocz,ll kon,ll l,ll r,ll v){ if(kon<l || r<pocz)return ak; if(l>=pocz && r<=kon){ return (ak+(*--lower_bound(sgtree[v].begin(),sgtree[v].end(),(pair<pair<ll,ll>,ll>){{ak,INF},INF})).ss)%(n+1); } ll pom=policz(ak,pocz,kon,l,(l+r)/2,v*2); //cout<<pom<<" "<<l<<" "<<r<<" "<<v<<" "<<pocz<<" "<<kon<<"\n"; return policz((pom),pocz,kon,(l+r)/2+1,r,v*2+1); } int main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; cin>>s; pier=n; for(ll i=0;i<n;i++){ if(s[i]=='B'){ pier=i; break; } } for(ll i=0;i<m;i++){ cin>>a; kras.pb(a); } for(ll i=0;i<m;i++){ sgtree[i+POT/2].pb({{0,kras[i]-1},kras[i]+1}); sgtree[i+POT/2].pb({{kras[i],n},kras[i]}); //sgtree[i+POT/2].pb({{n,n},a}); } for(ll i=m;i<POT/2;i++){ sgtree[i+POT/2].pb({{0,n},0}); } //return 0; for(ll i=POT/2-1;i>0;i--){ //ll ak=0; vector<pair<pair<ll,ll>,ll>>v=sgtree[i*2],v2; if(i==1)break; //v2.pb({{0,v.back().ss-1},v.back().ss}); for(ll j=0;j<v.size();j++){ if((v[j].ff.ff+v[j].ss)%(n+1)<=(v[j].ff.ss+v[j].ss)%(n+1)) v2.pb({{(v[j].ff.ff+v[j].ss)%(n+1),(v[j].ff.ss+v[j].ss)%(n+1)},v[j].ss%(n+1)}); else{ v2.pb({{(v[j].ff.ff+v[j].ss)%(n+1),n},v[j].ss%(n+1)}); v2.pb({{0,(v[j].ff.ss+v[j].ss)%(n+1)},v[j].ss%(n+1)}); } } sort(v2.begin(),v2.end()); //cout<<i<<": "; for(auto j : v2){ // cout<<j.ff.ff<<" "<<j.ff.ss<<" "<<j.ss<<" "; } // cout<<"\n"; for(ll j=0;j<v2.size();j++){ ll ak=lower_bound(sgtree[i*2+1].begin(),sgtree[i*2+1].end(),(pair<pair<ll,ll>,ll>){{v2[j].ff.ss,INF},INF})-sgtree[i*2+1].begin()-1; while(ak>=0 && sgtree[i*2+1][ak].ff.ss>=v2[j].ff.ff){ // cout<<j<<" "<<ak<<" "; sgtree[i].pb({{(max(v2[j].ff.ff,sgtree[i*2+1][ak].ff.ff)-v2[j].ss+n+1)%(n+1),(min(v2[j].ff.ss,sgtree[i*2+1][ak].ff.ss)-v2[j].ss+n+1)%(n+1)},(v2[j].ss+sgtree[i*2+1][ak].ss)%(n+1)}); ak--; } } // cout<<"\n"; sort(sgtree[i].begin(),sgtree[i].end()); //ll ak2=0; } for(ll i=1;i<POT;i++){ //for(auto j :sgtree[i]) // cout<<j.ff.ff<<" "<<j.ff.ss<<" "<<j.ss<<" "; // cout<<"\n"; }//return 0; cin>>q; for(ll i=0;i<q;i++){ cin>>a>>b; a--; b--; cout<<policz(pier,a,b,0,POT/2-1,1)<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...