QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#825244#9774. Same Sumucup-team5318#WA 1ms5948kbC++145.6kb2024-12-21 17:51:352024-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:43]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5948kb
  • [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]