P3909 異或之積(後綴和)
思路:後綴和的巧妙應用。
原式
時間複雜度:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
ll a[N],b[N],c[N];
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]),b[i]=c[i]=a[i];
}
for(int i=n;i>=1;i--){
c[i]=(c[i]+c[i+1])%mod;
b[i]=(b[i]*c[i+1]+b[i+1])%mod;
a[i]=(a[i]*b[i+1]+a[i+1])%mod;
}
printf("%lld\n",(a[1]*6%mod+mod)%mod);
return 0;
}