Submission #1143625

#TimeUsernameProblemLanguageResultExecution timeMemory
1143625owoovoCrossing (JOI21_crossing)C++20
100 / 100
375 ms28780 KiB
#include<bits/stdc++.h> #define ll long long #define F first #define S second using namespace std; int val[9][200010]; bool all[3][9][800010],can[9][800010]; int tag[800010]; void build(int l,int r,int id){// l,r 1-base tag[id]=-1; if(l==r){ for(int i=0;i<9;i++){ all[val[i][l]][i][id]=1; } return; } int m=(l+r)>>1; build(l,m,id*2+1); build(m+1,r,id*2+2); for(int i=0;i<3;i++){ for(int j=0;j<9;j++){ all[i][j][id]=all[i][j][id*2+1]&all[i][j][id*2+2]; } } return; } void addtag(int id,int v){ tag[id]=v; for(int i=0;i<9;i++){ can[i][id]=all[v][i][id]; } } void pull(int id){ for(int i=0;i<9;i++){ can[i][id]=can[i][id*2+1]&can[i][id*2+2]; } } void push(int id){ if(tag[id]!=-1){ addtag(id*2+1,tag[id]); addtag(id*2+2,tag[id]); tag[id]=-1; } } void modify(int l,int r,int id,int L,int R,int v){ if(l==L&&r==R){ addtag(id,v); return; } push(id); int m=(l+r)>>1; if(R<=m)modify(l,m,id*2+1,L,R,v); else if(L>m)modify(m+1,r,id*2+2,L,R,v); else { modify(l,m,id*2+1,L,m,v); modify(m+1,r,id*2+2,m+1,R,v); } pull(id); } vector<vector<int>> mov={{0,1,3},{1,2,4},{0,2,5},{2,3,6},{1,5,7},{0,4,8}}; int main(){ ios::sync_with_stdio(0); cin.tie(0); map<char,int> mp={{'J',0},{'O',1},{'I',2}}; int n; cin>>n; for(int i=0;i<3;i++){ for(int j=1;j<=n;j++){ char c; cin>>c; val[i][j]=mp[c]; } } for(auto v:mov){ int a=v[0],b=v[1],c=v[2]; for(int j=1;j<=n;j++){ val[c][j]=(2*val[a][j]+2*val[b][j])%3; } } build(1,n,0); auto query=[&]{ bool ok=0; for(int i=0;i<9;i++)ok|=can[i][0]; if(ok)cout<<"Yes\n"; else cout<<"No\n"; }; int q; cin>>q; for(int i=1;i<=n;i++){ char c; cin>>c; modify(1,n,0,i,i,mp[c]); } query(); for(int i=1;i<=q;i++){ int l,r; char c; cin>>l>>r>>c; modify(1,n,0,l,r,mp[c]); query(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...