比赛 NOIP模拟赛by mzx Day2 评测结果 AWAWAWTTEE
题目名称 学姐的巧克力盒 最终得分 30
用户昵称 Mealy 运行时间 8.612 s
代码语言 C++ 内存使用 68.99 MiB
提交时间 2016-10-20 22:00:05
显示代码纯文本
#include <iostream>
#include <cstdio>
#define u ree[tmpx]
#define lc ree[tmpx<<1]
#define rc ree[tmpx<<1^1]
using namespace std;
const int nmax=1000086;
typedef long long ll;
int n,m,k,FJ1,FJ2;
int type,tmpl,tmpr; 
ll val[nmax];
class SegmentTree
{
public:
	int l,r;
	ll pro;
}ree[nmax*4];

ll QuickPow(ll base,ll exp)
{
	ll ans=1;
	exp%=(FJ2-1);
	while(exp)
	{
		if(exp&1)
		{
			ans=(ans*base)%FJ2;
		}
		base=(base*base)%FJ2;
		exp>>=1;
	}
	return ans%FJ2;
}


void SetTree(int tmpx,int tmpl,int tmpr)
{
	u.l=tmpl;
	u.r=tmpr;
	if(tmpl==tmpr)
	{
		u.pro=val[tmpl];
	}
	else
	{
		SetTree(tmpx<<1,tmpl,(tmpl+tmpr)>>1);
		SetTree(tmpx<<1^1,((tmpl+tmpr)>>1)+1,tmpr);
		u.pro=lc.pro*rc.pro%FJ1;
	}
}
ll QueryPro(int tmpx,int tmpl,int tmpr)
{
	if(tmpl<=u.l&&tmpr>=u.r)
	{
		return u.pro%FJ1;
	}
	else
	{
		if(u.l!=u.r)
		{
		    ll tmpans=1;
		    if(tmpl<=lc.r)
		    {
		    	tmpans=tmpans*QueryPro(tmpx<<1,tmpl,tmpr)%FJ1;
		    }
	    	if(tmpr>=rc.l)
		    {
	    		tmpans=tmpans*QueryPro(tmpx<<1^1,tmpl,tmpr)%FJ1;
		    }
		    return tmpans;
		}
	}
}
void PreDo()
{
	scanf("%d%d%d%d%d",&n,&m,&k,&FJ1,&FJ2);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&val[i]);
	}
}
int main()
{
	freopen("chocolatebox.in","r",stdin);
	freopen("chocolatebox.out","w",stdout);
	PreDo();
	SetTree(1,1,n);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&type,&tmpl,&tmpr);
		if(type==1)
		{
			ll ans=QueryPro(1,tmpl,tmpr);
			printf("%lld",ans);
		}
		if(type==2)
		{
			int derta=tmpr-tmpl;

			ll tmp=QueryPro(1,tmpl,tmpr);
			ll ans=QuickPow(k,tmp);
			printf("%lld",ans);
		}		
	}
	return 0;
}