如題,已知乙個數列,你需要進行下面三種操作:
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...