问个奇怪的问题
  • 板块P4939 Agent2
  • 楼主Vitamin_B
  • 当前回复43
  • 已保存回复43
  • 发布时间2023/7/29 16:30
  • 上次更新2023/11/3 07:02:55
查看原帖
问个奇怪的问题
743373
Vitamin_B楼主2023/7/29 16:30

题解:数组开了 6×1076\times10^7 能 AC

我的:数组开了 4×1074\times10^7 MLE?

我的代码:

# include <bits/stdc++.h>

# define old_six \
	ios::sync_with_stdio (0);\
	\
	cin.tie (0);\
	\
	cout.tie (0);

# define ffor(i,name) \
	for (auto i = name.begin (); i != name.end (); ++ i)

# define iter(type) \
	type :: iterator

# define reg register

using namespace std;

typedef size_t st;

typedef long long ll;

typedef pair <int, int> pii;

typedef pair <ll, ll> pll;

int n, m, lazy[40000005], x, y;

bool op;

void push_down (int x, int mid, int l, int r) {

	lazy[x << 1] += lazy[x];

	lazy[(x << 1) + 1] += lazy[x];

	lazy[x] = 0;

	return ;

}

void tamper (int now, int l, int r, int x, int y) {

	if (l == x && r == y) {

		++ lazy[now];

		return ;

	}

	reg int mid = l + r >> 1;

	push_down (now, mid, l, r);

	if (mid >= y)
		tamper (now << 1, l, mid, x, y);
	else if (mid < x)
		tamper ((now << 1) + 1, mid + 1, r, x, y);
	else
		tamper (now << 1, l, mid, x, mid), tamper ((now << 1) + 1, mid + 1, r, mid + 1, y);

	return ;

}

int find (int now, int l, int r, int x) {

	if (l == r)
		return lazy[now];

	reg int mid = l + r >> 1;

	push_down (now, mid, l, r);

	if (mid >= x)
		return find (now << 1, l, mid, x);

	return find ((now << 1) + 1, mid + 1, r, x);

}

int main () {

	old_six

	cin >> n >> m;

	while (m --) {

		cin >> op >> x;

		if (op)
			cout << find (1, 1, n, x) << '\n';
		else
			cin >> y, tamper (1, 1, n, x, y);

	}

	return 0;

}
2023/7/29 16:30
加载中...