题目链接:

题意:有两个操作

操作1:给出n个操作,将区间为l到r的数字改为x

操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果

解法:

把询问离线,按照r从小到大排序

每次询问的时候,用珂朵莉树推平区间

求和,这个我们用树状数组维护即可

树状数组求出>=l的和

#include <bits/stdc++.h>
#define IT set<node>::iterator
using namespace std;
typedef long long ll;
const int M = 5e5 + ;
int n, m, q;
ll anss[M], bit[M];
struct node{
int l, r, w;
mutable ll v;
bool operator < (const node &rhs) const {
return l < rhs.l;
}
};
struct note{
int l, r, id;
ll v;
}a[M], b[M];
set <node> s;
void add(int i, ll x) {
if(!i) return;
while(i <= m) {
bit[i] += x;
i += i & (-i);
}
}
ll query(int i) {
ll ans = ;
while(i) {
ans += bit[i];
i -= i & (-i);
}
return ans;
}
IT split(int pos) {
IT it = s.lower_bound(node{pos});
if(it != s.end() && it->l == pos) return it;
it--;
int L = it->l, R = it->r, w = it->w;
ll V = it->v;
s.erase(it);
s.insert(node{L, pos - , w, V});
return s.insert(node{pos, R, w, V}).first;
}
void modify(int l, int r, int w, ll v) {
IT it2 = split(r + ), it1 = split(l), it3 = it1;
for(; it1 != it2; it1++) add(it1->w, -(it1->v) * (it1->r - it1->l + ));
s.erase(it3, it2);
s.insert(node{l, r, w, v});
add(w, v * (ll)(r - l + ));
}
bool cmp(note p, note q) {
return p.r < q.r;
}
int main(){
scanf("%d%d%d", &m, &n, &q);
s.insert(node{, n, , });
for(int i = ; i <= m; i++) scanf("%d%d%lld", &a[i].l, &a[i].r, &a[i].v);
for(int i = ; i <= q; i++) scanf("%d%d", &b[i].l, &b[i].r), b[i].id = i;
sort(b + , b + q + , cmp);
int j = ;
for(int i = ; i <= q; i++) {
while(j <= b[i].r && j <= m) modify(a[j].l, a[j].r, j, a[j].v), j++;
//printf("anss %lld %lld\n", query(n), query(b[i].l - 1));
anss[b[i].id] = query(m) - query(b[i].l - );
}
for(int i = ; i <= q; i++) printf("%lld\n", anss[i]);
return ;
}

Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组的更多相关文章

  1. [数据结构]ODT(珂朵莉树)实现及其应用,带图

    [数据结构]ODT(珂朵莉树)实现及其应用,带图 本文只发布于博客园,其他地方若出现本文均是盗版 算法引入 需要一种这样的数据结构,需要支持区间的修改,区间不同值的分别操作. 一般的,我们会想到用线段 ...

  2. Comet OJ - Contest #14

    Rank38. 还是比较不满意吧,C卡了太久,E没调出来,D也没空去做了. A 签到题. #include<bits/stdc++.h> using namespace std; #def ...

  3. Comet OJ - Contest #14题解

    Contest14的本质:区间覆盖+Tarjan( A 把距离公式两边平方即可 注意要long long code #include <algorithm> #include <io ...

  4. Comet OJ - Contest #6 C 一道树题 数学 + 推导

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  5. Comet OJ - Contest #4 D求和 思维题

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  6. Comet OJ - Contest #11 D isaster 重构树+倍增+dfs序+线段树

    发现对于任意一条边,起决定性作用的是节点编号更大的点. 于是,对于每一条边,按照节点编号较大值作为边权,按照最小生成树的方式插入即可. 最后用线段树维护 dfs 序做一个区间查询即可. Code: # ...

  7. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解

    参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...

  8. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  9. Comet OJ - Contest #4--前缀和

    原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...

随机推荐

  1. 池化技术之Java线程池

     https://blog.csdn.net/jcj_2012/article/details/84906657 作用 线程池,通过复用线程来提升性能; 背景 线程是一个操作系统概念.操作系统负责这个 ...

  2. Django框架之第八篇(模型层补充)--数据库的查询与优化:only/defer,select_related与prefetch_related,事务

    在设置外键字段时需要注意: 当你使用django2.x的版本时候,在建立外键关系时,需要你手动添加几个关键点参数 models.cascade #设置级联删除 db_constraints 数据库查询 ...

  3. [CF30E]Tricky and Clever Password(KMP+manacher)

    首先枚举回文中心,然后显然中心两边要尽量扩展作为middle,这个用manacher实现. 然后注意到suffix的结尾位置是固定的(串尾),那么预处理出以每个位置结尾的串与原串后缀至多能匹配多长,然 ...

  4. .net Dapper 学习系列(2) ---Dapper进阶

    目录 写在前面 前期准备 Dapper 单表批量添加 在Dapper 多表查询 在Dapper 调用存储过程 在Dapper 使用QueryMultiple进行多表查询 在Dapper 使用事务进行多 ...

  5. 2019 多益网络java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.多益网络等公司offer,岗位是Java后端开发,因为发展原因最终选择去了多益网络,入职一年时间了,也成为了面 ...

  6. Qt Creator 的下载与安装

    一.Qt和Qt Creator的区别 Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率. Qt Creator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可 ...

  7. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。

    给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 : 给定 ma ...

  8. 修复使用sub和sup时的行间距问题

    sub和sup元素会轻微地增大行高. 幸好,用一点CSS就可以修复这个问题. 来自Nicolas Gallagher和Jonathan Neal的normalize.css(http://necola ...

  9. openresty应用场景以及研发网关系统功能说明

    openresty主要应用场景 Web应用 进行一些业务逻辑处理,甚至进行耗CPU的模板渲染,一般流程:mysql/redis/http获取数据.业务处理.产生JSON/XML/模板渲染内容,比如京东 ...

  10. [LeetCode] 647. 回文子串 ☆☆☆(最长子串、动态规划、中心扩展算法)

    描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" ...