我没作弊啊QaQ,凭什么棕我?!我要申诉!!!
但是万一失败咋办啊!!!要崩溃了孩子们!!!给点建议
啥玩意?复活币?是money嘛?
你棕过吗?。。(有点不礼貌哈)
谢谢
你谢谢什么?我又帮你妈?(我没有棕过,但是上次有人把我的橙名看成棕名了。。。
emm……你认真的?
e打错字了对不起是:我有帮你吗
笑死了,好歹帮我平复了心情,谢谢
帮不了你啊,你这码风太像 AI 了,甚至还有注释,不好和管理解释。
等 14 天就行了,换个颜色而已,几乎没损失
6,但是我码风就这样啊!
你们看:
我写的线段树:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL N = 100005;
LL n, m, p;
LL a[N];
struct node {
LL l, r;
LL sum, add, mul;
} tree[N << 2];
void build(LL num, LL l, LL r);
void pushup(LL num);
void pushdown(LL num);
void mul(LL num, LL x, LL y, LL k);
void add(LL num, LL x, LL y, LL k);
LL modify(LL num, LL x, LL y);
int main(void)
{
cin >> n >> m >> p;
for (LL i = 1; i <= n; i++) {
cin >> a[i];
}
build(1, 1, n);
while (m--) {
LL oi, x, y;
cin >> oi >> x >> y;
if (oi == 1) {
LL k;
cin >> k;
k %= p;
mul(1, x, y, k);
}
if (oi == 2) {
LL k;
cin >> k;
k %= p;
add(1, x, y, k);
}
if (oi == 3) {
cout << modify(1, x, y) << '\n';
}
}
return 0;
}
void build(LL num, LL l, LL r) {
tree[num].l = l;
tree[num].r = r;
tree[num].mul = 1;
if (l == r) {
tree[num].sum = a[l] % p;
return;
}
LL mid = (l + r) >> 1;
build(num << 1, l, mid);
build(num << 1 | 1, mid + 1, r);
pushup(num);
return ;
}
void pushup(LL num) {
tree[num].sum = (tree[num << 1].sum + tree[num << 1 | 1].sum) % p;
return ;
}
void pushdown(LL num) {
tree[num << 1].sum = (tree[num << 1].sum * tree[num].mul + tree[num].add * (tree[num << 1].r - tree[num << 1].l + 1)) % p;
tree[num << 1 | 1].sum = (tree[num << 1 | 1].sum * tree[num].mul + tree[num].add * (tree[num << 1 | 1].r - tree[num << 1 | 1].l + 1)) % p;
tree[num << 1].mul = (tree[num << 1].mul * tree[num].mul) % p;
tree[num << 1 | 1].mul = (tree[num << 1 | 1].mul * tree[num].mul) % p;
tree[num << 1].add = (tree[num << 1].add * tree[num].mul + tree[num].add) % p;
tree[num << 1 | 1].add = (tree[num << 1 | 1].add * tree[num].mul + tree[num].add) % p;
tree[num].add = 0;
tree[num].mul = 1;
return ;
}
void mul(LL num, LL x, LL y, LL k) {
if (x <= tree[num].l && tree[num].r <= y) {
tree[num].add = (tree[num].add * k) % p;
tree[num].mul = (tree[num].mul * k) % p;
tree[num].sum = (tree[num].sum * k) % p;
return;
}
pushdown(num);
LL mid = (tree[num].l + tree[num].r) >> 1;
if (x <= mid) mul(num << 1, x, y, k);
if (y > mid) mul(num << 1 | 1, x, y, k);
pushup(num);
return;
}
void add(LL num, LL x, LL y, LL k) {
if (x <= tree[num].l && tree[num].r <= y) {
tree[num].add = (tree[num].add + k) % p;
tree[num].sum = (tree[num].sum + k * (tree[num].r - tree[num].l + 1)) % p;
return ;
}
pushdown(num);
LL mid = (tree[num].l + tree[num].r) >> 1;
if (x <= mid) add(num << 1, x, y, k);
if (y > mid) add(num << 1 | 1, x, y, k);
pushup(num);
return ;
}
LL modify(LL num, LL x, LL y) {
if (x <= tree[num].l && tree[num].r <= y) {
return tree[num].sum;
}
pushdown(num);
LL ans = 0;
LL mid = (tree[num].l + tree[num].r) >> 1;
if (x <= mid) ans = (ans + modify(num << 1, x, y)) % p;
if (y > mid) ans = (ans + modify(num << 1 | 1, x, y)) % p;
return ans;
}
不要紧,我是蒟蒻没几个粉丝 :) 估值没事,现在205咕,橙名绰绰有余
试试?我给你我写的代码和提交记录,在那个比赛之前
有啊,一堆