社区讨论
。。。。有没有人知道最后一个点的坑?
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 条回复,欢迎继续交流。
正在加载回复...