求dalao帮助
by 无名ZWH @ 2020-05-31 20:04:25
不在60分以上的看不到代码,把它贴出来吧
by 天命之路 @ 2020-05-31 20:09:00
@[无名ZWH](/user/226142) 怎么又是您/fad
您的乘法标记为什么是清空后是 0 啊
by Limit @ 2020-05-31 20:09:13
?(
by 嫐嬲巭孬 @ 2020-05-31 20:09:13
看不到代码.jpg
by WOWHandsome @ 2020-05-31 20:11:00
```cpp
#include<bits/stdc++.h>
using namespace std;
long long a[1000500],tr[1000500],ans[1000500],b[1000500],he[1000050],lazy[1000500],busy[1000050];
long long mid,n,m,ji=0,sum=0,pop;
void build(long long k,long long l,long long r)
{
if(l==r){
tr[k]=a[l];
tr[k]=tr[k]%pop;
return ;
}
long long mid=(r-l)/2+l;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
tr[k]=tr[k*2+1]+tr[k*2];
tr[k]=tr[k]%pop;
}
void push(int k,int l,int r)
{
if(busy[k]!=0){
tr[k]*=busy[k];
tr[k]=tr[k]%pop;
if (busy[k*2]==0){
busy[k*2]=busy[k];
busy[k*2]=busy[k*2]%pop;
lazy[k*2]*=busy[k];
lazy[k*2]=lazy[k*2]%pop;
he[k*2]*=busy[k];
he[k*2]=he[k*2]%pop;
}
else{
busy[k*2]*=busy[k];
busy[k*2]=busy[k*2]%pop;
lazy[k*2]*=busy[k];
lazy[k*2]=lazy[k*2]%pop;
he[k*2]*=busy[k];
he[k*2]=he[k*2]%pop;
}
if (busy[k*2+1]==0){
busy[k*2+1]=busy[k];
busy[k*2+1]=busy[k*2+1]%pop;
lazy[k*2+1]*=busy[k];
lazy[k*2+1]=lazy[k*2+1]%pop;
he[k*2+1]*=busy[k];
he[k*2+1]=he[k*2+1]%pop;
}
else{
busy[k*2+1]*=busy[k];
busy[k*2+1]=busy[k*2+1]%pop;
lazy[k*2+1]*=busy[k];
lazy[k*2+1]=lazy[k*2+1]%pop;
he[k*2+1]*=busy[k];
he[k*2+1]=he[k*2+1]%pop;
}
busy[k]=0;
}
if(lazy[k]!=0){
lazy[k*2]+=lazy[k];
lazy[k*2+1]+=lazy[k];
lazy[k*2+1]=lazy[k*2+1]%pop;
lazy[k*2]=lazy[k*2]%pop;
tr[k]+=(r-l+1)*lazy[k];
tr[k]=tr[k]%pop;
lazy[k]=0;
}
return ;
}
void check(long long x,long long y)
{
for(;x!=1;){
he[x/2]+=y;
he[x/2]=he[x/2]%pop;
x=x/2;
}
}
void change(long long k,long long l,long long r,long long cha1,long long cha2,long long jia)//cha1?a2¡§|?¡§¡ã?????¨¢¡§???|¨¬??¨º?cha2?a¡§?¡§¡ã??|¨¬??¨º?l?a?¨¢¡§??????¨º?r?a¡§?¡§¡ã?????¨º?jia?a2¡§¡ä?¨¢??
{
if(l==cha1&&r==cha2)
{
if(busy[k]==0){
check(k,tr[k]*(jia-1)+lazy[k]*(jia-1)+he[k]*(jia-1));
busy[k]+=jia;
busy[k]=busy[k]%pop;
}
else {
check(k,tr[k]*(jia-1)*busy[k]+lazy[k]*(jia-1)+he[k]*(jia-1));
busy[k]*=jia;
busy[k]=busy[k]%pop;
}
he[k]*=jia;
he[k]=he[k]%pop;
lazy[k]=lazy[k]*jia;
lazy[k]=lazy[k]%pop;
return ;
}
push(k,l,r);
if(l<=cha1&&r>=cha2){
long long mid=(r-l)/2+l;
if(mid>=cha2) change(k*2,l,mid,cha1,cha2,jia);
if(mid+1<=cha1) change(k*2+1,mid+1,r,cha1,cha2,jia);
if(mid<cha2&&cha1<mid+1) {
change(k*2,l,mid,cha1,mid,jia);
change(k*2+1,mid+1,r,mid+1,cha2,jia);
}
}
} //-------------------------------------------------------------------
void gai(long long k,long long l,long long r,long long cha1,long long cha2,long long jia)//cha1?a2¡§|?¡§¡ã?????¨¢¡§???|¨¬??¨º?cha2?a¡§?¡§¡ã??|¨¬??¨º?l?a?¨¢¡§??????¨º?r?a¡§?¡§¡ã?????¨º?jia?a2¡§¡ä?¨¢??
{
if(l==cha1&&r==cha2){
check(k,(cha2-cha1+1)*jia);
lazy[k]+=jia;
lazy[k]=lazy[k]%pop;
return ;
}
push(k,l,r);
if(l<=cha1&&r>=cha2){
long long mid=(r-l)/2+l;
if(mid>=cha2) gai(k*2,l,mid,cha1,cha2,jia);
if(mid+1<=cha1) gai(k*2+1,mid+1,r,cha1,cha2,jia);
if(mid<cha2&&cha1<mid+1) {
gai(k*2,l,mid,cha1,mid,jia);
gai(k*2+1,mid+1,r,mid+1,cha2,jia);
}
}
} //-------------------------------------------------------------------
void yong(long long k,long long l,long long r,long long cha1,long long cha2)
//cha1?a2¡§|?¡§¡ã?????¨¢¡§???|¨¬??¨º?cha2?a¡§?¡§¡ã??|¨¬??¨º?l?a?¨¢¡§??????¨º?r?a¡§?¡§¡ã????
{
if(l==cha1&&r==cha2){
sum=sum+tr[k]+(r-l+1)*lazy[k]+he[k];
if(busy[k]!=0){
sum+=(busy[k]-1)*tr[k];
}
sum=sum%pop;
return ;
}
if(l<=cha1&&r>=cha2){
push(k,l,r);
long long mid=(r-l)/2+l;
if(mid>=cha2) yong(k*2,l,mid,cha1,cha2);
if(mid+1<=cha1) yong(k*2+1,mid+1,r,cha1,cha2);
if(mid<cha2&&cha1<mid+1) {
yong(k*2,l,mid,cha1,mid);
yong(k*2+1,mid+1,r,mid+1,cha2);
}
}
}
int main()
{
//freopen("1.in","r",stdin);
scanf("%lld%lld%lld",&n,&m,&pop);
for(long long i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
build(1,1,n);
long long pan,l1,l2,c;
for(long long i=1;i<=m;i++){
scanf("%lld",&pan);
if(pan==1){
scanf("%lld%lld%lld",&l1,&l2,&c);
change(1,1,n,l1,l2,c);
}
if(pan==2){
scanf("%lld%lld%lld",&l1,&l2,&c);
gai(1,1,n,l1,l2,c);
}
if(pan==3){
ji++;
scanf("%lld%lld",&l1,&l2);
sum=0;
yong(1,1,n,l1,l2);
ans[ji]=sum;
sum=0;
}
}
for(long long i=1;i<=ji;i++){
printf("%lld\n",ans[i]);
}
return 0;
}
```
by 无名ZWH @ 2020-05-31 20:11:31
@[Limit](/user/86625) 调不动QWQ
by 无名ZWH @ 2020-05-31 20:11:52
@[无名ZWH](/user/226142) 标记用得有点乱~~怪不得这么长~~
by Limit @ 2020-05-31 20:12:18
@[Limit](/user/86625) 这样应该是可以的吧,毕竟乘法标记为0有特判
by 无名ZWH @ 2020-05-31 20:13:21
@[Limit](/user/86625) 十分离谱QWQ
by 无名ZWH @ 2020-05-31 20:14:16