比赛 期末考试0 评测结果 AAATTTTTTT
题目名称 我能在摸鱼被发现的情况下躲避教练的视奸吗 最终得分 30
用户昵称 rzzakioi 运行时间 21.833 s
代码语言 C++ 内存使用 82.85 MiB
提交时间 2026-02-07 10:01:16
显示代码纯文本
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
int n,m,fa[500005][22],fb[500005][22],fc[500005][22];
const int mod=4294967296;
int s[1005][1005];
int gcd(int m,int n){
    if(!n)return m;
    int r=m%n;
    while(r){
        m=n;
        n=r;
        r=m%n;
    }
    return n;
}
int ans=0;
signed main(){
    freopen("shijian.in","r",stdin);
    freopen("shijian.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++)scanf("%lld",&fa[i][0]);
    for(int i=1;i<=n;i++)scanf("%lld",&fb[i][0]);
    for(int i=1;i<=n;i++)scanf("%lld",&fc[i][0]);
    for(int j=1;(1<<j)<=n;j++){
        for(int i=1;i+(1<<j)-1<=n;i++){
            fa[i][j]=fa[i][j-1]&fa[i+(1<<(j-1))][j-1];
            fb[i][j]=fb[i][j-1]|fb[i+(1<<(j-1))][j-1];
            fc[i][j]=gcd(fc[i][j-1],fc[i+(1<<(j-1))][j-1]);
        }
    }
    for(int l=1;l<=n;l++){
        for(int r=l;r<=n;r++){
            int k=log2(r-l+1);
            int aans=fa[l][k]&fa[r-(1<<k)+1][k];
            int bans=fb[l][k]|fb[r-(1<<k)+1][k];
            int cans=gcd(fc[l][k],fc[r-(1<<k)+1][k]);
            int Ans=(aans*bans%mod)*cans%mod;
            s[l][r]=Ans;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            s[i][j]+=s[i-1][j];
            s[i][j]%=mod;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            s[i][j]+=s[i][j-1];
            s[i][j]%=mod;
        }
    }
    for(int i=1;i<=m;i++){
        int l,r;
        scanf("%lld%lld",&l,&r);
        int Ans=s[r][r]-s[r][l-1]-s[l-1][r]+s[l-1][l-1];
        Ans=(Ans%mod+mod)%mod;
        if(m<=100000){
            printf("%lld\n",Ans);
        }
        else{
            ans^=Ans;
            ans%=mod;
        }
    }
    if(m>100000){
        printf("%lld",ans);
    }
    return 0;
}