求查错
查看原帖
求查错
422191
ulrica_AKall楼主2021/7/19 17:53

rt,函数到底哪里写错了,一直RE

#include<iostream>
#include<cstdio>
#define ll long long
#define lson root<<1
#define rson root<<1|1
using namespace std;
int p;
const int maxn=100005;
ll a[maxn];
struct node{
	ll v,mul,add;
}st[maxn<<2];
void build(int root,int l,int r){
	st[root].mul=1;
	st[root].add=0;
	if(l==r)st[root].v=a[l];
	else {
		int mid=(l+r)>>1;
		build(lson,l,mid);
		build(rson,mid+1,r);
		st[root].v=st[root*2].v+st[root*2+1].v;
	}
	st[root].v%=p;
	return;
}
void pushdown(int root,int l,int r){
	int mid=(l+r)>>1;
	st[lson].v=(st[lson].v*st[root].mul+st[root].add*(mid-l+1))%p;
	st[rson].v=(st[rson].v*st[root].mul+st[root].add*(r-mid))%p;
	st[lson].mul=(st[lson].mul*st[root].mul)%p;
	st[rson].mul=(st[rson].mul*st[root].mul)%p;
	st[lson].add=(st[lson].add*st[root].mul+st[root].add)%p;
	st[rson].add=(st[rson].add*st[root].mul+st[root].add)%p;
	st[root].mul=1;
	st[root].add=0;
	return;
}
void mulit(int root,int strl,int strr,int l,int r,ll k){
	if(r<strl||strr<l)return;
	if(l<=strl&&strr<=r)
	{
		st[root].v=(st[root].v*k)%p;
		st[root].mul=(st[root].mul*k)%p;
		st[root].add=(st[root].add*k)%p;
		return;
	}
	pushdown(root,strl,strr);
	int mid=(strl+strr)>>1;
	mulit(lson,strl,mid,l,r,k);
	mulit(rson,mid+1,strr,l,r,k);
	st[root].v=(st[lson].v+st[rson].v)%p;
	return;
}
void addit(int root,int strl,int strr,int l,int r,ll k){
	if(strl>r||strr<l)return;
	if(strl>=l&&strr<=r)
	{
		st[root].add=(st[root].add+k)%p;
		st[root].v=(st[root].v+k*(strr-strl+1))%p;
		return;
	}
		pushdown(root,strl,strr);
		int mid=(strr+strl)>>1;
		addit(lson,strl,mid,l,r,k);
		addit(rson,mid+1,strr,l,r,k);
		st[root].v=(st[lson].v+st[rson].v)%p;
		return;
}
ll query(int root,int strl,int strr,int l,int r){
	if(strl>r||strr<l)return 0;
	if(l<=strl&&r<=strr)
	{
		return st[root].v;
	}
	pushdown(root,strl,strr);
	int mid=(strr+strl)>>1;
	return (query(lson,strl,mid,l,r)+query(rson,mid+1,strr,l,r))%p;
}
2021/7/19 17:53
加载中...