QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#20954 | #1831. Bruteforce | conqueror_of_zky# | Compile Error | / | / | C++14 | 3.7kb | 2022-02-21 21:15:38 | 2022-05-18 04:10:35 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2022-05-18 04:10:35]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2022-02-21 21:15:38]
- 提交
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
int n,k,w,a[100005],b[200005],rk[200005],id[200005],POS[100005],X[100005],N,C[8][8];
struct query
{
int op,p,x;
}ava[500005];
int avava;
inline int ksm(int x,int y,int mod)
{
int rtn=1;
while(y)
{
if(y&1) rtn=rtn*x%mod;
x=x*x%mod,y>>=1;
}
return rtn;
}
struct stree
{
int l,r,add;
int smod[5][6],sum[6];
}t[600005];
inline void build(int now,int l,int r)
{
t[now].l=l,t[now].r=r;
for(int i=0;i<5;i++)
for(int j=0;j<=5;j++)
t[now].smod[i][j]=t[now].sum[j]=0;
if(l==r) return ;
int mid=(l+r)/2;
build(now*2,l,mid),build(now*2+1,mid+1,r);
}
inline giveadd(int now,int x)
{
t[now].add+=x;
for(int i=5;i>=1;i--)
{
for(int j=i-1;j>=0;j--)
t[now].sum[i]+=t[now].sum[j]*ksm(x,i-j,mod)%mod*C[i][j];
t[now].sum[i]%=mod;
}
int qwq[5][6];
for(int i=0;i<5;i++)
for(int j=0;j<=5;j++)
qwq[i][j]=t[now].smod[(i+x%w+w)%w][j];
for(int i=0;i<5;i++)
for(int j=0;j<=5;j++)
t[now].smod[i][j]=qwq[i][j];
}
inline void pd(int now)
{
if(t[now].add)
{
giveadd(now*2,t[now].add);
giveadd(now*2+1,t[now].add);
t[now].add=0;
}
}
inline void upd(int now)
{
for(int i=0;i<5;i++)
for(int j=0;j<=5;j++)
t[now].smod[i][j]=t[now*2].smod[i][j]+t[now*2+1].smod[i][j];
for(int j=0;j<=5;j++)
t[now].sum[j]=(t[now*2].sum[j]+t[now*2+1].sum[j])%mod;
}
inline void changerk(int now,int l,int r,int x)
{
if(t[now].l==l&&t[now].r==r)
{
giveadd(now,x);
return ;
}
pd(now);
if(t[now*2].r>=r) changerk(now*2,l,r,x);
else if(t[now*2+1].l<=l) changerk(now*2+1,l,r,x);
else changerk(now*2,l,t[now*2].r,x),changerk(now*2+1,t[now*2+1].l,r,x);
upd(now);
}
/*inline void changerk(int l,int r,int x)
{
for(int i=l;i<=r;i++) rk[i]+=x;
}*/
inline void changeb(int now,int p,int x)
{
if(t[now].l==t[now].r)
{
t[now].sum[0]=x;
for(int i=1;i<=5;i++)
t[now].sum[i]=t[now].sum[i-1]*t[now].add%mod;
// cout << t[now].add << "\n";
// cout << t[now].l << " " << x << " " << t[now].sum[2] << '\n';
for(int k=0;k<5;k++)
{
t[now].smod[k][0]=x%w;
for(int i=1;i<=5;i++)
t[now].smod[k][i]=t[now].smod[k][i-1]*(t[now].add+k)%w;
}
return ;
}
pd(now);
if(t[now*2].r>=p) changeb(now*2,p,x);
else changeb(now*2+1,p,x);
upd(now);
}
/*
inline void changeb(int p,int x)
{
b[p]=x;
}*/
inline int qsum()
{
return t[1].sum[k];
}
/*inline int qsum()
{
int rtn=0;
for(int i=1;i<=N;i++)
rtn=(rtn+b[i]*ksm(rk[i],k,mod))%mod;
return rtn;
}*/
inline int qmod()
{
return t[1].smod[0][k];
}
/*
inline int qmod()
{
int rtn=0;
for(int i=1;i<=N;i++)
rtn=(rtn+b[i]*ksm(rk[i],k,w)%w)%mod;
return rtn;
}*/
inline int inv(int x)
{
return ksm(x,mod-2,mod);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> k >> w;
id[0]=1;
for(int i=0;i<=5;i++)
{
C[i][0]=C[i][i]=1;
for(int j=1;j<i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
for(int i=1;i<=n;i++)
{
cin >> a[i];
++id[a[i]+1];
}
int q;
cin >> q;
for(int i=1;i<=q;i++)
{
cin >> POS[i] >> X[i];
++id[X[i]+1];
}
for(int i=1;i<=100001;i++)
id[i]+=id[i-1];
N=id[100001];
build(1,1,N);
for(int i=1;i<=n;i++)
ava[++avava]={1,++id[a[i]],a[i]};
for(int i=1;i<=q;i++)
{
ava[++avava]={2,id[a[POS[i]]]--,a[POS[i]]};
ava[++avava]={1,++id[X[i]],X[i]};
a[POS[i]]=X[i];
ava[++avava]={3,0,0};
}
for(int i=1;i<=avava;i++)
{
if(ava[i].op==1)
{
changerk(1,ava[i].p,N,1);
changeb(1,ava[i].p,ava[i].x);
}
else if(ava[i].op==2)
{
changerk(1,ava[i].p,N,-1);
changeb(1,ava[i].p,0);
}
else cout << ((qsum()-qmod())%mod*inv(w)%mod+mod)%mod << "\n";
// cout << (qmod()%mod+mod)%mod << "\n";
}
return 0;
}
詳細信息
answer.code:36:8: error: ISO C++ forbids declaration of ‘giveadd’ with no type [-fpermissive] 36 | inline giveadd(int now,int x) | ^~~~~~~ answer.code: In function ‘int giveadd(long long int, long long int)’: answer.code:52:1: warning: no return statement in function returning non-void [-Wreturn-type] 52 | } | ^