社区讨论
求助卡常或求复杂度
P2174小Z的神奇数列参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m0jfbbwa
- 此快照首次捕获于
- 2024/09/01 18:23 2 年前
- 此快照最后确认于
- 2025/11/04 21:52 4 个月前
rt,multiset做法,最后两个点慢了0.08s。
代码:
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=317847191;
int n,m;
int x;
char c;
int phimod;
int ans=1;
multiset<int>s;
void euler(){
int n=mod;
phimod=mod;
for(int i=2;i*i<=n;i++){
if(n%i==0){
phimod=phimod/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) phimod=phimod/n*(n-1);
}
int qpow(int a,int b){
if(b==0) return 1;
if(b%2==0){
int qwq=qpow(a,b/2);
return qwq*qwq%mod;
}
return a*qpow(a,b-1)%mod;
}
int inv(int x){
return qpow(x,phimod-1);
}
signed main(){
scanf("%lld%lld",&n,&m);
euler();
for(int i=1;i<=n;i++){
scanf("%lld",&x);
ans*=x;
ans%=mod;
s.insert(x);
}
while(m--){
scanf(" %c",&c);
if(c=='M'){
multiset<int>::iterator it=s.end();
it--;
printf("%lld\n",qpow(*it,*s.begin()));
}
if(c=='D'){
scanf("%lld",&x);
ans=ans*inv(x)%mod;
s.erase(x);
}
if(c=='S'){
printf("%lld\n",*s.begin());
}
if(c=='B'){
multiset<int>::iterator it=s.end();
it--;
printf("%lld\n",*it);
}
if(c=='T'){
printf("%lld\n",ans);
}
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...