QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#825244 | #9774. Same Sum | ucup-team5318# | WA | 1ms | 5948kb | C++14 | 5.6kb | 2024-12-21 17:51:35 | 2024-12-21 17:51:43 |
Judging History
你现在查看的是最新测评结果
- [2025-01-11 11:59:18]
- hack成功,自动添加数据
- (/hack/1443)
- [2024-12-23 17:02:06]
- hack成功,自动添加数据
- (/hack/1310)
- [2024-12-23 16:48:26]
- hack成功,自动添加数据
- (/hack/1309)
- [2024-12-23 16:33:45]
- hack成功,自动添加数据
- (/hack/1308)
- [2024-12-23 16:23:53]
- hack成功,自动添加数据
- (/hack/1307)
- [2024-12-23 16:13:08]
- hack成功,自动添加数据
- (/hack/1306)
- [2024-12-23 15:54:42]
- hack成功,自动添加数据
- (/hack/1305)
- [2024-12-23 14:58:39]
- hack成功,自动添加数据
- (/hack/1304)
- [2024-12-23 09:58:11]
- hack成功,自动添加数据
- (/hack/1302)
- [2024-12-23 09:47:22]
- hack成功,自动添加数据
- (/hack/1301)
- [2024-12-23 09:41:23]
- hack成功,自动添加数据
- (/hack/1300)
- [2024-12-23 09:26:32]
- hack成功,自动添加数据
- (/hack/1299)
- [2024-12-23 09:19:58]
- hack成功,自动添加数据
- (/hack/1298)
- [2024-12-23 09:13:29]
- hack成功,自动添加数据
- (/hack/1297)
- [2024-12-22 18:52:18]
- hack成功,自动添加数据
- (/hack/1296)
- [2024-12-22 18:13:14]
- hack成功,自动添加数据
- (/hack/1294)
- [2024-12-21 17:51:35]
- 提交
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
mt19937 rd(time(0));
const int N=2e5+5,mod=1e9+9;
const ll inf=4e18;
int n,q,a[N],vv[N],v1[N],c[15][15];
namespace work1
{
struct Seg_tree
{
struct STree{int l,r,v[8],add;ll minn,maxn,add1;}t[N*4];
void pushup(int p){for(int i=0;i<=7;i++)t[p].v[i]=(t[p*2].v[i]+t[p*2+1].v[i])%mod,t[p].minn=min(t[p*2].minn,t[p*2+1].minn),t[p].maxn=max(t[p*2].maxn,t[p*2+1].maxn);}
void update(int p,int vv)
{
t[p].add=(t[p].add+vv)%mod;
for(int i=7;i>=0;i--)
{
int nv=vv;
for(int j=i-1;j>=0;j--)t[p].v[i]=(t[p].v[i]+1ll*t[p].v[j]*c[i][j]%mod*nv)%mod,nv=1ll*nv*vv%mod;
}
}
void update1(int p,ll vv)
{
t[p].add1+=vv,t[p].minn+=vv,t[p].maxn+=vv;
}
void pushdown(int p)
{
if(t[p].add)update(p*2,t[p].add),update(p*2+1,t[p].add),t[p].add=0;
if(t[p].add1)update1(p*2,t[p].add1),update1(p*2+1,t[p].add1),t[p].add1=0;
}
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r)
{
t[p].v[0]=1,t[p].minn=t[p].maxn=a[l];
for(int i=1;i<=7;i++)t[p].v[i]=1ll*t[p].v[i-1]*a[l]%mod;
return ;
}
int mid=l+r>>1;
build(p*2,l,mid),build(p*2+1,mid+1,r),pushup(p);
}
void change(int p,int l,int r,int v)
{
if(l<=t[p].l && t[p].r<=r)return update(p,v),update1(p,v);pushdown(p);
int mid=t[p].l+t[p].r>>1;
if(l<=mid)change(p*2,l,r,v);if(mid<r)change(p*2+1,l,r,v);pushup(p);
}
void ask(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r){for(int i=0;i<=7;i++)v1[i]=(v1[i]+t[p].v[i])%mod;return ;}pushdown(p);
int mid=t[p].l+t[p].r>>1;
if(l<=mid)ask(p*2,l,r);if(mid<r)ask(p*2+1,l,r);
}
ll ask1(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r)return t[p].minn;pushdown(p);
int mid=t[p].l+t[p].r>>1;ll res=inf;
if(l<=mid)res=min(res,ask1(p*2,l,r));if(mid<r)res=min(res,ask1(p*2+1,l,r));return res;
}
ll ask2(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r)return t[p].maxn;pushdown(p);
int mid=t[p].l+t[p].r>>1;ll res=-inf;
if(l<=mid)res=max(res,ask2(p*2,l,r));if(mid<r)res=max(res,ask2(p*2+1,l,r));return res;
}
}t1;
void solve()
{
for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]*=2;
t1.build(1,1,n);
while(q--)
{
int op,l,r,v;
scanf("%d %d %d",&op,&l,&r);
if(op==1)
{
scanf("%d",&v),v*=2;
t1.change(1,l,r,v);
}
else
{
for(int i=0;i<=7;i++)v1[i]=0;
t1.ask(1,l,r);
ll minn=t1.ask1(1,l,r),maxn=t1.ask2(1,l,r);
ll mid=minn+maxn>>1;
mid%=mod;
bool fl=0;
for(int i=1;i<=7;i+=2)
{
int now=0,num=1;
for(int j=0;j<=i;j++)
{
now=(now+1ll*num*v1[i-j]%mod*c[i][j])%mod;
num=1ll*num*(mod-mid)%mod;
}
if(now!=0){fl=1;break;}
}
if(fl)printf("NO\n");else printf("YES\n");
}
}
}
}
namespace work2
{
struct Seg_tree
{
struct STree{int l,r,v[12],add;ll minn,maxn,add1;}t[N*4];
void pushup(int p){for(int i=0;i<=9;i++)t[p].v[i]=(t[p*2].v[i]+t[p*2+1].v[i])%mod,t[p].minn=min(t[p*2].minn,t[p*2+1].minn),t[p].maxn=max(t[p*2].maxn,t[p*2+1].maxn);}
void update(int p,int vv)
{
t[p].add=(t[p].add+vv)%mod;
for(int i=11;i>=0;i--)
{
int nv=vv;
for(int j=i-1;j>=0;j--)t[p].v[i]=(t[p].v[i]+1ll*t[p].v[j]*c[i][j]%mod*nv)%mod,nv=1ll*nv*vv%mod;
}
}
void update1(int p,ll vv)
{
t[p].add1+=vv,t[p].minn+=vv,t[p].maxn+=vv;
}
void pushdown(int p)
{
if(t[p].add)update(p*2,t[p].add),update(p*2+1,t[p].add),t[p].add=0;
if(t[p].add1)update1(p*2,t[p].add1),update1(p*2+1,t[p].add1),t[p].add1=0;
}
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r)
{
t[p].v[0]=1,t[p].minn=t[p].maxn=a[l];
for(int i=1;i<=11;i++)t[p].v[i]=1ll*t[p].v[i-1]*a[l]%mod;
return ;
}
int mid=l+r>>1;
build(p*2,l,mid),build(p*2+1,mid+1,r),pushup(p);
}
void change(int p,int l,int r,int v)
{
if(l<=t[p].l && t[p].r<=r)return update(p,v),update1(p,v);pushdown(p);
int mid=t[p].l+t[p].r>>1;
if(l<=mid)change(p*2,l,r,v);if(mid<r)change(p*2+1,l,r,v);pushup(p);
}
void ask(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r){for(int i=0;i<=11;i++)v1[i]=(v1[i]+t[p].v[i])%mod;return ;}pushdown(p);
int mid=t[p].l+t[p].r>>1;
if(l<=mid)ask(p*2,l,r);if(mid<r)ask(p*2+1,l,r);
}
ll ask1(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r)return t[p].minn;pushdown(p);
int mid=t[p].l+t[p].r>>1;ll res=inf;
if(l<=mid)res=min(res,ask1(p*2,l,r));if(mid<r)res=min(res,ask1(p*2+1,l,r));return res;
}
ll ask2(int p,int l,int r)
{
if(l<=t[p].l && t[p].r<=r)return t[p].maxn;pushdown(p);
int mid=t[p].l+t[p].r>>1;ll res=-inf;
if(l<=mid)res=max(res,ask2(p*2,l,r));if(mid<r)res=max(res,ask2(p*2+1,l,r));return res;
}
}t1;
void solve()
{
for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]*=2;
t1.build(1,1,n);
while(q--)
{
int op,l,r,v;
scanf("%d %d %d",&op,&l,&r);
if(op==1)
{
scanf("%d",&v),v*=2;
t1.change(1,l,r,v);
}
else
{
for(int i=0;i<=11;i++)v1[i]=0;
t1.ask(1,l,r);
ll minn=t1.ask1(1,l,r),maxn=t1.ask2(1,l,r);
ll mid=minn+maxn>>1;
mid%=mod;
bool fl=0;
for(int i=1;i<=11;i+=2)
{
int now=0,num=1;
for(int j=0;j<=i;j++)
{
now=(now+1ll*num*v1[i-j]%mod*c[i][j])%mod;
num=1ll*num*(mod-mid)%mod;
}
if(now!=0){fl=1;break;}
}
if(fl)printf("NO\n");else printf("YES\n");
}
}
}
}
int main()
{
for(int i=0;i<=14;i++){c[i][0]=1;for(int j=1;j<=i;j++)c[i][j]=c[i-1][j]+c[i-1][j-1];}
scanf("%d %d",&n,&q);
if(n<=1e5 || q<=1e5)work2::solve();
else work1::solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 5948kb
input:
8 4 1 2 3 4 5 6 7 8 2 1 8 1 1 4 4 2 1 6 2 1 8
output:
NO NO NO
result:
wrong answer expected YES, found NO [1st token]