我没作弊啊QaQ,凭什么棕我?!我要申诉!!!
但是万一失败咋办啊!!!要崩溃了孩子们!!!给点建议
啊!!!【疯】
不要紧 @stringdp100005 巨佬会帮我
@俞天行 反馈是可以反馈的,但是一般看管理员心情(因为其实没有很好的证据证明一个人没有作弊,也没有很好的证据证明一个人作弊
@俞天行 反馈不成功,还可以用复活币
啥玩意?复活币?是money嘛?
你棕过吗?。。(有点不礼貌哈)
@俞天行 我没有棕过,你可以看一下文章,或者问一下别人
谢谢
你谢谢什么?我又帮你妈?(我没有棕过,但是上次有人把我的橙名看成棕名了。。。
emm……你认真的?
e打错字了对不起是:我有帮你吗
笑死了,好歹帮我平复了心情,谢谢
帮不了你啊,你这码风太像 AI 了,甚至还有注释,不好和管理解释。
等 14 天就行了,换个颜色而已,几乎没损失
@stringdp100005 有损失,会掉估值!而且可能导致粉丝减少
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咕,橙名绰绰有余
@俞天行 确实太像AI了,不好整,我也许可以帮你,就说和你同机房,看过你的马蜂和习惯
试试?我给你我写的代码和提交记录,在那个比赛之前
@俞天行 不行这样骗人不太好,你有同机房的同学吗
有啊,一堆