Luogu P3373 模板 線段樹 2

2021-08-28 03:54:29 字數 1351 閱讀 2794

如題,已知乙個數列,你需要進行下面三種操作:

1.將某區間每乙個數乘上x

2.將某區間每乙個數加上x

3.求出某區間每乙個數的和

#include #define mem(x,v) memset(x,v,sizeof(x)) 

#define go(i,a,b) for (int i = a; i <= b; i++)

#define og(i,a,b) for (int i = a; i >= b; i--)

#define mid(a,b) (a + b) / 2

#define lson now << 1

#define rson now << 1 | 1

using namespace std;

typedef long long ll;

const int n = 1e5+100;

ll mul[n*4],add[n*4];

ll val[n*4],w[n];

int n,m;

ll p;

void pushdown(int now, int a, int b)

void build(int now, int a, int b)

int mid = mid(a,b);

build(lson,a,mid);

build(rson,mid,b);

val[now] = (val[lson] + val[rson]) % p;

return;

}void insert(int now, int a, int b, int l, int r, ll k, int op) else

return;

} pushdown(now,a,b);

int m = mid(a,b);

if (l < m) insert(lson,a,m,l,r,k,op);

if (r >= m) insert(rson,m,b,l,r,k,op);

val[now] = (val[lson] + val[rson]) % p;

}ll query(int now, int a, int b, int l, int r)

pushdown(now,a,b);

int m = mid(a,b);

if (l < m) ans = (ans + query(lson,a,m,l,r)) % p;

if (r >= m) ans = (ans + query(rson,m,b,l,r)) % p;

return ans;

}int main() else

} return 0;

}

Luogu P3373 模板 線段樹 2

如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包...

P3373 線段樹模板

如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包...

luogu3373 模板 線段樹 2

題面 已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 題解區間修改 區間查詢。維護兩個lazytag include include using namespace std const int maxn 100010 type...