제출 #1136529

#제출 시각아이디문제언어결과실행 시간메모리
1136529Hamed_GhaffariIntergalactic ship (IZhO19_xorsum)C++20
45 / 100
332 ms3424 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,sse4,sse4.2,lzcnt,popcnt") using ll = long long; #define pb push_back #define SZ(x) int(x.size()) const int MXN = 1001; const int MXQ = 2e5+1; const int LOG = 7; const int MOD = 1e9+7; ll pw[MXQ], ans; int n, q, a[MXN], L[MXN], R[MXN], X[MXN], del[MXN], add[MXN][LOG]; vector<int> add2[MXN][LOG][LOG]; inline void fix(ll &x) { x -= (x>=MOD ? MOD : 0); } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); pw[0] = 1; for(int i=1; i<MXQ; i++) fix(pw[i] = pw[i-1]<<1); cin >> n; for(int i=0; i<n; i++) cin >> a[i]; cin >> q; for(int i=0; i<q; i++) { cin >> L[i] >> R[i] >> X[i]; L[i]--; R[i]--; for(int x=0; x<LOG; x++) if(X[i]>>x & 1) { add[L[i]][x]++; add[R[i]+1][x]--; for(int y=0; y<LOG; y++) if(X[i]>>y & 1) add2[L[i]][x][y].pb(i); } } for(int x=0; x<LOG; x++) for(int y=0; y<LOG; y++) { fill(del, del+n, 0); int A=0, B=0, C=0; for(int i=0; i<n; i++) { A += add[i][x]; B += add[i][y]; C += SZ(add2[i][x][y]) - del[i]; for(int p : add2[i][x][y]) del[R[p]+1]++; int BB=B, CC=C; for(int j=i; j<n; j++) { if(i<j) { B += add[j][y]; C -= del[j]; } A -= C; B -= C; // 1 1 fix(ans += pw[q-A-B-C+(i<j)] *(i+1)%MOD *(n-j)%MOD *(A ? pw[A-1] : (a[i]>>x&1))%MOD *(B ? pw[B-1] : (a[j]>>y&1))%MOD *(C ? pw[C-1] : 1)%MOD *pw[x+y]%MOD); // 0 0 fix(ans += pw[q-A-B-C+(i<j)] *(i+1)%MOD *(n-j)%MOD *(A ? pw[A-1] : (a[i]>>x&1?0:1))%MOD *(B ? pw[B-1] : (a[j]>>y&1?0:1))%MOD *(C ? pw[C-1] : 0)%MOD *pw[x+y]%MOD); A += C; B += C; } B=BB, C=CC; } } cout << ans << '\n'; 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...
#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...