Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组
题意:有两个操作
操作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 转转的数据结构题 珂朵莉树+树状数组的更多相关文章
- [数据结构]ODT(珂朵莉树)实现及其应用,带图
[数据结构]ODT(珂朵莉树)实现及其应用,带图 本文只发布于博客园,其他地方若出现本文均是盗版 算法引入 需要一种这样的数据结构,需要支持区间的修改,区间不同值的分别操作. 一般的,我们会想到用线段 ...
- Comet OJ - Contest #14
Rank38. 还是比较不满意吧,C卡了太久,E没调出来,D也没空去做了. A 签到题. #include<bits/stdc++.h> using namespace std; #def ...
- Comet OJ - Contest #14题解
Contest14的本质:区间覆盖+Tarjan( A 把距离公式两边平方即可 注意要long long code #include <algorithm> #include <io ...
- Comet OJ - Contest #6 C 一道树题 数学 + 推导
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- Comet OJ - Contest #4 D求和 思维题
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- Comet OJ - Contest #11 D isaster 重构树+倍增+dfs序+线段树
发现对于任意一条边,起决定性作用的是节点编号更大的点. 于是,对于每一条边,按照节点编号较大值作为边权,按照最小生成树的方式插入即可. 最后用线段树维护 dfs 序做一个区间查询即可. Code: # ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #4--前缀和
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...
随机推荐
- 【洛谷】P1308 统计单词数-全AC题解(易理解
弟弟的混乱代码(易理解 大概 思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等:不相等继续循环:相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个 ...
- python3 安装 pyinstaller 时报错的解决办法
如上图所示,在安装的过程中发现是所关联的一个 future模块安装失败,庵后我有单独安装了一下这个future,发现还是失败 然后在网上寻找解决办法,最后找到了这个指令,pip install fut ...
- STM8L052C6T6液晶LCD驱动过程
首先还是必要的说明,鄙人经验有限,如发现问题还请不吝赐教,反馈到邮箱mr.li.ming@qq.com 使用的液晶屏 单片机引脚 液晶的COM1-COM4分别对应单片机LCD_COM0-LCD_COM ...
- 国际化地区语言码对照表(i18n)
af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...
- mysql 复制表结构(包括索引等)、表内容
=============================================== 2019/7/16_第1次修改 ccb_warlock == ...
- jquery.pagination.js分页demo
公用jquery.pagination.js /** * This jQuery plugin displays pagination links inside the selected elemen ...
- win10下jupyter修改默认路径的办法
查了很多资料,发现都不管用,最后亲测找到一种方法. 实现的方法就是修改快捷方式标签的目标栏,如下图: 后面有一个%USERPROFILE% 将%USERPROFILE%改成你要的路径就可以了 然后应用 ...
- 学习网络BGP必备基础知识
外部网关协议,使用TCP作为传输层协议,支持CIDR,增量更新,距离矢量路由协议,无环路,路由策略丰富,可防止路由震荡,易于扩展. BGP概述 #BGP工作原理 之 报文类型 TCP三次握手 open ...
- 【python】文件下载---基础版
基于TCP协议的基础版本,不支持大文件 Client.py import socket def main(): # 1. 创建套接字 tcp_socket = socket.socket(socket ...
- vue v-show无法动态更新的问题
本人之前学过angularJS,记得v-for绑定的数组,只要切换v-if = ''item.show'' 只要改变相关的值,就可以对应的值,视图就会重新渲染,但是在vue中却不灵了,找到答案了,需要 ...