RE了,求调,找不出来
查看原帖
RE了,求调,找不出来
470590
LikAzusa_楼主2023/11/16 21:52
#include <bits/stdc++.h>
#define int long long

using namespace std;

inline int read()
{
	int x = 0, f = 1; char c = getchar();
	while(c > '9' || c < '0') {if(c == '-') f = -1; c = getchar();}
	while(c <= '9' && c >= '0') {x = x * 10 + c - '0'; c = getchar();}
	return x * f;
}

const int maxn = 1e5 + 10;

struct Node
{
	int l, r;
	int mina;
	int lazy;
}t[maxn << 2];

struct node
{
	int op;
	int l, r;
	int x;
}e[maxn];

int T;
int a[maxn], End[maxn];
int ans[maxn];
int cnt;
int n, q;

/*
牛魔的!!!!!对着线段树发癫!!!!!!!!!!!!!
为什么调不出来!!!!!!!!!!!!!!!!!!!!! 
*/

void update(int id)
{
	t[id].mina = min(t[id<<1].mina, t[id<<1|1].mina);
}

void pushdown(int id)
{
	if(t[id].lazy)
	{
		t[id<<1].lazy += t[id].lazy;
		t[id<<1|1].lazy += t[id].lazy;
		
		t[id<<1].mina -= t[id].lazy;
		t[id<<1|1].mina -= t[id].lazy;
		t[id].lazy = 0;
	}
}

void build(int id, int L, int R)
{
	t[id].lazy = 0;
	if(L == R)
	{
		t[id].lazy = 0;
		t[id].mina = End[L];
	}
	int mid = (L + R) >> 1;
	build(id<<1, L, mid);
	build(id<<1|1, mid+1, R);
	update(id);
}

void change(int id, int L, int R, int _l, int _r, int x)
{
	if(L >= _l && R <= _r)
	{
		t[id].lazy += x;
		return;
	}
	int mid = (L + R) >> 1;
	if(_l <= mid) change(id<<1, L, mid, _l, _r, x);
	if(_r > mid) change(id<<1|1, mid+1, R, _l, _r, x);
	update(id);
}

int query(int id, int L, int R, int _l, int _r)
{
	if(L >= _l && R <= _r) return t[id].mina;
	int mid = (L + R) >> 1;
	int ans = 1e18;
	pushdown(id);
	if(_l <= mid) ans = min(query(id<<1, L, mid, _l, _r), ans);
	if(_r > mid) ans = min(query(id<<1|1, mid+1, R, _l, _r), ans);
	return ans; 
}

signed main()
{
	T = read();
	while(T--)
	{
		memset(e, 0, sizeof(e));
		memset(a, 0, sizeof(a));
		memset(End, 0, sizeof(End));//多测记得清空,被坑过好几回了。
		memset(ans, 0, sizeof(ans));
		cnt = 0;
		n = read(); q = read();
		for(int i = 1; i <= n; i++) a[i] = read();
		for(int i = 1; i <= q; i++)
		{
			e[i].op = read(); e[i].l = read(); e[i].r = read();
			if(e[i].op == 1)
			{
				e[i].x = read();
			}
		} 
		for(int i = 1; i <= n; i++) End[i] = read();
		build(1, 1, n);
		for(int i = q; i >= 1; i--)
		{
			if(e[i].op == 1)
			{
				change(1, 1, n, e[i].l, e[i].r, e[i].x);
			}
			else
			{
				ans[++cnt] = query(1, 1, n, e[i].l, e[i].r);
			}
		}
		for(int i = cnt; i >= 1; i--)
		{
			cout << ans[i] << " ";
		}
		cout << endl;
	}
	return 0;
}

玄2关

2023/11/16 21:52
加载中...