社区讨论

。。。。有没有人知道最后一个点的坑?

P3934[Ynoi Easy Round 2016] 炸脖龙 I参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi6m082u
此快照首次捕获于
2025/11/20 07:04
4 个月前
此快照最后确认于
2025/11/20 07:04
4 个月前
查看原帖
RT 最后一个点 WA
read 11533
expect 8
'''cpp
CPP
#include<bits/stdc++.h>
const int N = 5e5+9,P = 2e7+9;
typedef unsigned long long ll;
using namespace std;
ll n,m,a[N],c[N];
ll phi[P],prime[P],cnt;
bool vis[P];
inline ll read(){
    ll q=0,w=1;char c=getchar();
    while(!isdigit(c)){if(c=='-')w=-1;c=getchar();}
    while(isdigit(c))q=q*10+c-'0',c=getchar();
    return w*q;
}
inline void add(ll x,ll val){while(x <= N){c[x] += val;x += x&-x;}}
inline ll ask(ll x){
    ll res = 0;
    while(x){res += c[x]; x -= x & -x;}
    return res;
}
inline void GetPhi(){
    phi[0] = phi[1] = 1;
    for(int i = 2;i <= P;++i){
        if(!vis[i])prime[++cnt] = i,phi[i] = i-1;
        for(int j = 1;j <= cnt;++j){
            if(i*prime[j] > P)break;
            vis[i*prime[j]] = true;
            if(i % prime[j] == 0){phi[i*prime[j]] = phi[i] * prime[j];break;}
            phi[i*prime[j]] = phi[i] * phi[prime[j]];
        }
    }
}
inline ll PowMod(ll a,ll b,ll p){
    ll res = 1;
    for(;b;b>>=1,a=a*a%p)if(b&1)res = res * a % p;
    return res;
}
inline ll Calc(ll l,ll r, ll p){
    if(p == 1)return 1;
    ll now = ask(l);
    if(l == r)return now%p + p;
    return PowMod(now%p,Calc(l+1,r,phi[p])+phi[p],p);
}
int main(){
    GetPhi();
    n = read(); m = read();
    for(int i = 1;i <= n;++i){
        a[i] = read();
        add(i,a[i] - a[i-1]);
    }
    while(m--){
        ll op = read(), l = read(), r = read(), p = read();
        if(op == 1){
            add(l,p);add(r+1,-p);
        } else {
            printf("%lld\n",(Calc(l,r,p)%p + p ) % p);
        }
    }
}
'''cpp

回复

3 条回复,欢迎继续交流。

正在加载回复...