社区讨论
本题强制离线?
P1972[SDOI2009] HH 的项链参与者 7已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @mi8623vv
- 此快照首次捕获于
- 2025/11/21 09:13 4 个月前
- 此快照最后确认于
- 2025/11/21 09:48 4 个月前
RT,数组开小,开大,蒟蒻该怎么办?
评测记录链接分别如下:
评测记录链接分别如下:
注:代码中的
代码如下(
CPPpool数组是提前申请的内存。代码如下(
MLE):#include <iostream>
#include <algorithm>
constexpr int maxv = 1000005, maxn = 500005;
struct Node {
int val = 0;
Node *lson = nullptr, *rson = nullptr;
} pool[maxn * 20 + 3], *addr[maxn];
int ptr = 0, n, m, prev[maxv];
Node* alloc() {
return pool + ++ptr;
}
void update(Node *rt) {
rt->val = 0;
if (rt->lson) rt->val += rt->lson->val;
if (rt->rson) rt->val += rt->rson->val;
}
#define MID (((l) + (r)) >> 1)
void modify(int l, int r, Node *rt, Node *prev, int v) {
// std::cout << l << '-' << r << std::endl;
if (l == r) {
rt->val = prev->val + 1;
// std::cout << "--- " << rt->val << std::endl;
return;
}
if (v <= MID) {
rt->rson = prev->rson;
modify(l, MID, rt->lson = alloc(), prev->lson, v);
} else {
rt->lson = prev->lson;
modify(MID + 1, r, rt->rson = alloc(), prev->rson, v);
}
update(rt);
}
int query(int l, int r, Node *rt, int p) {
if (!rt) return 0;
if (r <= p) return rt->val;
int res = query(l, MID, rt->lson, p);
if (p > MID) res += query(MID + 1, r, rt->rson, p);
return res;
}
int main() {
pool->lson = pool->rson = addr[0] = pool;
std::cin >> n;
for (int i = 1; i <= n; ++i) {
int temp = 0;
std::cin >> temp;
modify(0, maxn, addr[i] = alloc(), addr[i - 1], prev[temp]);
prev[temp] = i;
}
std::cin >> m;
while (m--) {
int x, y, a, b;
std::cin >> x >> y, b = query(0, maxn, addr[x - 1], x - 1);
a = query(0, maxn, addr[y], x - 1);
// std::cout << a << '=' << b << std::endl;
std::cout << a - b << std::endl;
}
return 0;
}
回复
共 13 条回复,欢迎继续交流。
正在加载回复...