这题数据是真nm水,建议数据重造
my accepted code:
#include <bits/stdc++.h>
using namespace std;
int maxn=-1e9,minn=1e9,a[1000005],f[1000005],ans[1000005],w,zf,n,m;
long long sum=1,mod=317847191;
char c,e[1000005],d[100000005];
int read()
{
w=0;zf=1;c=getchar();
while(c<'0'||c>'9'){if(c=='-')zf=-1;c=getchar();}
while(c>='0'&&c<='9'){w=(w<<3)+(w<<1)+(c^48);c=getchar();}
return w*zf;
}
int ksm(int a,int b){int res=1;for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)res=1ll*res*a%mod;return res;}
int main()
{
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
n=read();m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
d[a[i]]++;
}
for(int i=1;i<=m;i++)
{
cin>>e[i];
if(e[i]=='D')
{
f[i]=read();
d[f[i]]--;
}
}
for(int i=1;i<=n;i++)
if(d[a[i]])
{
maxn=max(maxn,a[i]);
minn=min(minn,a[i]);
sum=(long long)sum*a[i]%mod;
d[a[i]]--;
}
for(int i=m;i>=1;i--)
{
if(e[i]=='D')
{
maxn=max(maxn,f[i]);
minn=min(minn,f[i]);
sum=1ll*sum*f[i]%mod;
}
if(e[i]=='B')ans[i]=maxn;
if(e[i]=='S')ans[i]=minn;
if(e[i]=='M')ans[i]=ksm(maxn,minn);
if(e[i]=='T')ans[i]=sum;
}
for(int i=1;i<=m;i++)
if(e[i]!='D')printf("%d\n",ans[i]);
}
mkdata:
#include<bits/stdc++.h>
#define int long long
const int N=6e5+5,M=3e5;
using namespace std;
int n,m,ans;
char a;
long long mod=317847191;
int ksm(int a,int b){int res=1;for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)res=1ll*res*a%mod;return res;}
signed main()
{
freopen("data.in","w",stdout);
n=260;m=1;
cout<<ksm(2,260)<<'\n';
cout<<n<<' '<<m<<'\n';
for(int i=1;i<=n;i++)cout<<2<<' ';cout<<'\n';
cout<<"T\n";
}
死因: 我写的是char数组,范围只有256
这题连重复数字>256的数据都没有吗?