Comet OJ #contest14 D.转转的数据结构题(珂朵莉树)

本文介绍了一种利用珂朵莉树和线段树解决区间更新问题的算法,通过离线处理和按右端点排序的查询,有效地处理了大量区间修改和查询操作。

题目:https://cometoj.com/contest/73/problem/D?problem_id=4120

由于有“将一段区间全部变成v”这一操作,考虑使用珂朵莉树维护。

将所有查询离线按右端点排序,在每个查询询问前,将1到R的操作全部做完,然后使用线段树/树状数组查询大于当前询问的L的操作产生的贡献。

在珂朵莉树的节点中记录一下当前节点是由第几次操作产生,assigan时消除上次的贡献,加入现在的贡献,即可维护操作产生的区间和。

ac代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int maxn = 5e5 + 5;

int n, m, q;
ll ans[maxn];

struct op {
    int l, r;
    ll v;
} a[maxn];

struct query {
    int l, r, id;

    friend bool operator<(const query &a, const query &b) {
        return a.r < b.r;
    }
} b[maxn];

struct node {
    int l, r, id;
    ll v;

    friend bool operator<(const node &a, const node &b) {
        return a.l < b.l;
    }
};

ll t[maxn << 2];

void update(int rt, int l, int r, int pos, ll val) {
    if (l == r) {
        t[rt] += val;
        return;
    }
    int mid = (l + r) >> 1;
    if (pos <= mid) {
        update(rt << 1, l, mid, pos, val);
    } else {
        update(rt << 1 | 1, mid + 1, r, pos, val);
    }
    t[rt] = t[rt << 1] + t[rt << 1 | 1];
}

ll query(int rt, int l, int r, int L, int R) {
    if (l >= L && r <= R) {
        return t[rt];
    }
    int mid = (l + r) >> 1;
    ll ans = 0;
    if (L <= mid) {
        ans += query(rt << 1, l, mid, L, R);
    }
    if (R > mid) {
        ans += query(rt << 1 | 1, mid + 1, r, L, R);
    }
    return ans;
}

set<node> cot;

void init(int l, int r, int v) {
    cot.clear();
    cot.insert({l, r, 0, v});
}

auto spilt(int x) {
    if (x > n) {
        return cot.end();
    }
    auto it = --cot.upper_bound({x, 0, 0, 0});
    if (it->l == x) {
        return it;
    }
    int l = it->l, r = it->r, v = it->v, id = it->id;
    cot.erase(it);
    cot.insert({l, x - 1, id, v});
    return cot.insert({x, r, id, v}).first;
}

void assign(int l, int r, ll v, int id) {
    //先split右端点,再split左端点
    auto itr = spilt(r + 1), itl = spilt(l);
    for (; itl != itr;) {
        auto j = itl;
        ++itl;
        update(1, 1, m, j->id, -1LL * (j->r - j->l + 1) * j->v);
        cot.erase(j);
    }
    cot.insert({l, r, id, v});
    update(1, 1, m, id, 1LL * (r - l + 1) * v);
}

int main() {
    scanf("%d%d%d", &m, &n, &q);
    for (int i = 1; i <= m; ++i) {
        scanf("%d%d%lld", &a[i].l, &a[i].r, &a[i].v);
    }
    for (int i = 1; i <= q; ++i) {
        scanf("%d%d", &b[i].l, &b[i].r);
        b[i].id = i;
    }
    sort(b + 1, b + q + 1);

    init(1, n, 0);
    for (int i = 1; i <= q; ++i) {
        for (int j = b[i - 1].r + 1; j <= b[i].r; ++j) {
            assign(a[j].l, a[j].r, a[j].v, j);
        }
        ans[b[i].id] = query(1, 1, m, b[i].l, m);
    }
    for (int i = 1; i <= q; ++i) {
        printf("%lld\n", ans[i]);
    }
    return 0;
}
/*
1 500000 1
1 500000 2000000000
1 1
 */
内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值