有没有神犇能来骂我几句
  • 板块灌水区
  • 楼主dvsfanjo
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/22 19:49
  • 上次更新2024/3/22 21:28:42
查看原帖
有没有神犇能来骂我几句
1198462
dvsfanjo楼主2024/3/22 19:49

线段树模板1,只写了给区间加数的函数(我都觉得好傻)

#include <bits/stdc++.h>
#define ll long long
#define rep(i, a, b) for(ll (i) = (a); (i) <= (b); (i)++)
#define per(i, a, b) for(ll (i) = (a); (i) >= (b); (i)--)
using namespace std;
const int N = 4e5 + 5;
ll n, m, k;
ll x, y, z;
struct Node
{
	ll num, lazy;
};
Node a[N];
inline ll read(){
	ll x = 0,f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9')
	{
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
	return x * f;
}
void write(ll x, char c, int i){
	if(x < 0) putchar('-'), x = -x;
	if(x > 9) write(x / 10, c, i + 1);
	putchar(x % 10 + '0');
	if (!i) putchar(c);
	return;
}
void build(ll l, ll r, ll cn, ll id){
	a[id].num += k, a[id].lazy = 0;
	if (l == r) return;
	ll mid = (l + r) >> 1;
	if (l <= cn && cn <= mid) build(l, mid, cn, id * 2);
	else build(mid + 1, r, cn, id * 2 + 1);
	return;
}
void add(ll l, ll r, ll cn, ll id){
	a[id].num += (r - l + 1) * cn;
	if (l == r)
	{
		return;
	}
	ll mid = (l + r) >> 1;
	if (l <= x && x <= mid)
	{
		if (x <= y && y <= mid)
		{
			if (x == l && y == r)
			{
				return;
			}
		}
		add(l, mid, cn, id * 2);
	}
	else if (mid < x && x <= r)
	{
		if (x <= y && y <= r)
		{
			if (x == mid + 1 && y == r)
			{
				return;
			}
		}
		add(mid + 1, r, cn, id * 2 + 1);
	}
	return;
}
int main()
{
	n = read(), m = read();
	rep (i, 1, n)
	{
		k = read();
		build(1, n, i, 1);
	}
	//print(1, n, 1);
	rep (i, 1, m)
	{
		k = read();
		if (k == 1)
		{
			x = read(), y = read();
		}
		else if (k == 2)
		{
			x = read(), y = read(), z = read();
			add(1, n, z, 1);
		}
	}
	print(1, n, 1);
	return 0;
}

如果骂了就帮我看错哪了,怎么加lazy标记

void print(ll l, ll r, ll id){//调试代码,打印线段树
	cout << l << " " << r << " " << a[id].num << " " << a[id].lazy << endl;
	if (l == r) return;
	ll mid = (l + r) >> 1;
	print(l, mid, id * 2);
	print(mid + 1, r, id * 2 + 1);
	return;
}

小蒟蒻纯自学,错的太离谱就紫衫

2024/3/22 19:49
加载中...