题目链接:

题意:有两个操作

操作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. C语言学习笔记01——C语言概述

    作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明.谢谢! 1 C语言的起源 1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritc ...

  2. sublime text 打开总是弹框报错Unable to download ChineseLocalizations. Please view the console for more details.解决办法

    本文链接:https://blog.csdn.net/qq_36435508/article/details/92805256 依次点击软件的    Preferences->Package S ...

  3. 无法定位 Local Database Runtime 安装。请验证 SQL Server Express 是否正确安装以及本地数据库运行时功能是否已启用。

    错误描述: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ...

  4. SpringBoot中Logback日志的配置

    说明 在SpringBoot中自带的日志工具是Logback,我们可以在Springboot的配置文件中直接对Logback进行一些简单的配置,如: logging.level.com.nowcode ...

  5. Excel 2010同时打开2个或多个独立窗口

    亲测有效 参考下面的网址 https://jingyan.baidu.com/article/86fae346acca7d3c49121ad4.html 1. 在win+r  输入框里面输入“rege ...

  6. Java自学-控制流程 continue

    Java的 continue语句 继续下一次循环 示例 1 : continue 如果是双数,后面的代码不执行,直接进行下一次循环 public class HelloWorld { public s ...

  7. Flink入门 - 窗口函数

    /* * ProcessWinFunOnWindow */ final StreamExecutionEnvironment streamExecutionEnvironment = StreamEx ...

  8. Sign in with apple

    UI: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/ 审核: h ...

  9. linux技能点三 find grep

    find:      1.   按文件名查找    find . -name "a*.txt"     注意双引号:  2.   按文件大小查找 find .-size [+/-] ...

  10. vue v-for中的item改变无法引起视图的更新

    写过angularjs的同学知道,如果ng-repeat中的item绑定到对应的model,item改变是会引起视图的更新的,但是vue中不起作用,具体的解决办法: 在vue脚手架中,首先引入vue ...