Submission #1187486

#TimeUsernameProblemLanguageResultExecution timeMemory
1187486PieArmyIntergalactic ship (IZhO19_xorsum)C++20
100 / 100
882 ms3184 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second #define endl '\n' using namespace std; int n,q; int arr[1023]; int lef[100023],rig[100023],k[100023]; int pref[1023][7],s[1023]; ll two[100023]; vector<int>v[1023]; const ll MOD=1e9+7; ll ans=0; ll carp(ll x,ll y){ if(x>=MOD)x%=MOD; if(y>=MOD)y%=MOD; return (x*y)%MOD; } ll topla(ll x,ll y){ if(x+y<MOD)return x+y; return (x+y)%MOD; } ll cal(int a,int b,int x,int y){ if(a==0&&x==0)return 0; if(b==0&&y==0)return 0; ll res=1; if(a)res=carp(res,two[a-1]); if(b)res=carp(res,two[b-1]); return res; } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } cin>>q; two[0]=1; for(int i=1;i<=q;i++){ two[i]=(two[i-1]*2)%MOD; cin>>lef[i]>>rig[i]>>k[i]; v[lef[i]].pb(i); for(int j=0;j<7;j++){ if(!((1<<j)&k[i]))continue; pref[lef[i]][j]++; pref[rig[i]+1][j]--; } } for(int i=1;i<=n;i++){ for(int j=0;j<7;j++){ pref[i][j]+=pref[i-1][j]; } } for(int b1=0;b1<7;b1++){ for(int b2=0;b2<7;b2++){ int both=0; for(int i=1;i<=n;i++){ for(int x:v[i]){ if((k[x]&(1<<b1))==0)continue; if((k[x]&(1<<b2))==0)continue; s[rig[x]+1]++; both++; } both-=s[i]; s[i]=0; int both2=both; for(int j=i;j<=n;j++){ both-=s[j]; int x=(1<<b1)&arr[i],y=(1<<b2)&arr[j]; ll res=carp(carp(carp(i,n-j+1),1+!!(j-i)),carp(two[q-pref[i][b1]-pref[j][b2]+both],carp(1<<b1,1<<b2))); if((x==0&&pref[i][b1]+both==0)||(y==0&&pref[j][b2]+both==0))continue; if((!!x)!=(!!y)&&x+y==0)continue; if(both)ans=topla(ans,carp(res,carp(topla(cal(pref[i][b1]-both,pref[j][b2]-both,!!x,!!y),cal(pref[i][b1]-both,pref[j][b2]-both,!x,!y)),two[both-1]))); else ans=topla(ans,carp(res,cal(pref[i][b1]-both,pref[j][b2]-both,!!x,!!y))); } both=both2; } } } cout<<ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...