题目链接:

题意:有两个操作

操作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. [转帖]SSD和内存数据库技术

    SSD和内存数据库技术 自己的理解还是不是很对 SSD 提升的是 随机读 并没有对顺序写有多大的提升, 因为数据库采用的是redo的模式. 理论上写入 时是顺序写 所以 写并发的提升不会很大 但是会很 ...

  2. C 语言 基础篇

    1.机器语言 2.汇编语言 3.高级语言:C.C++.Java(基于虚拟机) C语言开发:Unix,Linux,Mac OS,iOS,Android,Windows,Ubuntu 开发环境:visua ...

  3. git学习笔记 --分支管理策略

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...

  4. 使用Dapper查询记录是否存在

    /// <summary> /// Dapper数据访问抽象基础类 /// </summary> public class DapperHelper { public stat ...

  5. Spring-Cloud之Config配置中心-7

    一.我们前面基本上都是讲解的Spring Cloud Netflix的组件,下面我们会重点说Spring Cloud Config分布式配置中心.为什么需要这个组件来管理配置呢?在分布式应用开发过程中 ...

  6. js基础闭包练习题

    题目描述 实现函数 makeClosures,调用之后满足如下条件:1.返回一个函数数组 result,长度与 arr 相同2.运行 result 中第 i 个函数,即 result[i](),结果与 ...

  7. 手写MQ框架(一)-准备启程

    一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...

  8. exchange From Middle English eschaunge

    exchange From Middle English eschaunge, borrowed from Anglo-Norman eschaunge exchange 1.An act of ex ...

  9. 设计的一些kubernetes面试题

    公司现在上了一部分的业务至k8s,老实说,我心里很慌,在项目改造中,每天都会遇到很多问题,好友找我出一份k8s面试题,参考了网上的一些,再加上自己公司遇到的一些问题,整理如下: 参考链接:http:/ ...

  10. ECharts快速入门

    一.简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Saf ...