제출 #382136

#제출 시각아이디문제언어결과실행 시간메모리
382136vanicIntergalactic ship (IZhO19_xorsum)C++14
47 / 100
2085 ms262148 KiB
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <vector> #include <cassert> #include <bitset> using namespace std; typedef long long ll; const int maxn=1005, mod=1e9+7, maxq=1e5+5, Log=7; inline int sum(int a, int b){ if(a+b>=mod){ return a+b-mod; } if(a+b<0){ return a+b+mod; } return a+b; } inline int mul(int a, int b){ return (ll)a*b%mod; } int n, m; int a[maxn]; int sol; int q[maxq][3]; int komb[maxn][maxn][Log][Log][2][2]; void precompute(){ bool p1, p2; for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ for(int k=0; k<Log; k++){ for(int l=0; l<Log; l++){ p1=a[i]&(1<<k); p2=a[j]&(1<<l); komb[i][j][k][l][p1][p2]=1; } } } } for(int qq=0; qq<m; qq++){ for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ for(int k=0; k<Log; k++){ for(int l=0; l<Log; l++){ if(q[qq][0]<=i && q[qq][1]>=i && q[qq][0]<=j && q[qq][1]>=j && (1<<k)&q[qq][2] && (1<<l)&q[qq][2]){ komb[i][j][k][l][0][0]=sum(komb[i][j][k][l][0][0], komb[i][j][k][l][1][1]); komb[i][j][k][l][0][1]=sum(komb[i][j][k][l][0][1], komb[i][j][k][l][1][0]); komb[i][j][k][l][1][0]=komb[i][j][k][l][0][1]; komb[i][j][k][l][1][1]=komb[i][j][k][l][0][0]; } else if(q[qq][0]<=i && q[qq][1]>=i && (1<<k)&q[qq][2]){ komb[i][j][k][l][0][0]=sum(komb[i][j][k][l][0][0], komb[i][j][k][l][1][0]); komb[i][j][k][l][0][1]=sum(komb[i][j][k][l][0][1], komb[i][j][k][l][1][1]); komb[i][j][k][l][1][0]=komb[i][j][k][l][0][0]; komb[i][j][k][l][1][1]=komb[i][j][k][l][0][1]; } else if(q[qq][0]<=j && q[qq][1]>=j && (1<<l)&q[qq][2]){ komb[i][j][k][l][0][0]=sum(komb[i][j][k][l][0][0], komb[i][j][k][l][0][1]); komb[i][j][k][l][0][1]=komb[i][j][k][l][0][0]; komb[i][j][k][l][1][0]=sum(komb[i][j][k][l][1][0], komb[i][j][k][l][1][1]); komb[i][j][k][l][1][1]=komb[i][j][k][l][1][0]; } else{ komb[i][j][k][l][0][0]=mul(komb[i][j][k][l][0][0], 2); komb[i][j][k][l][0][1]=mul(komb[i][j][k][l][0][1], 2); komb[i][j][k][l][1][0]=mul(komb[i][j][k][l][1][0], 2); komb[i][j][k][l][1][1]=mul(komb[i][j][k][l][1][1], 2); } } } } } } } void rijesi(){ int kofa; for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ if(i!=j){ kofa=2*(i+1)*(n-j); } else{ kofa=(i+1)*(n-j); } for(int k=0; k<Log; k++){ for(int l=0; l<Log; l++){ sol=sum(sol, mul(mul(1<<(k+l), kofa), komb[i][j][k][l][1][1])); } } } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i=0; i<n; i++){ cin >> a[i]; } cin >> m; for(int i=0; i<m; i++){ cin >> q[i][0] >> q[i][1] >> q[i][2]; q[i][0]--; q[i][1]--; } precompute(); /* for(int i=0; i<n; i++){ for(int j=i; j<n; j++){ for(int k=0; k<2; k++){ for(int l=0; l<2; l++){ cout << komb[i][j][k][l][1][1] << ' '; } cout << '\n'; } cout << '\n'; } cout << '\n'; }*/ rijesi(); cout << sol << '\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...