题意:给定线段树,上面若干个节点坏了,求能表示出多少区间。

区间能被表示出当且仅当拆出来的log个节点都是好的。

解:每个区间在最浅的节点处计算答案。

对于每个节点维护从左边过来能有多少区间,从右边过来能有多少区间即可。

说起来水的一批为什么会被评成黑题啊。

 #include <bits/stdc++.h>

 typedef long long LL;
const int N = ;
const LL MO = ; LL lc[N], rc[N], ans;
int tot, ls[N], rs[N];
bool vis[N]; void add(LL L, LL R, LL l, LL r, int &o) {
//printf("%lld %lld %lld %lld %d \n", L, R, l, r, o);
if(!o) o = ++tot;
if(L <= l && r <= R) {
vis[o] = ;
return;
}
LL mid = (l + r) >> ;
if((r - l + ) & ) mid--;
if(L <= mid) add(L, R, l, mid, ls[o]);
if(mid < R) add(L, R, mid + , r, rs[o]);
} void cal(LL l, LL r, int &o) {
if(!o) {
o = ++tot;
LL len = (r - l + ) % MO;
ans = (ans + len * (len + ) / ) % MO;
//printf("[%lld %lld] ans += %lld = %lld \n", l, r, len * (len + 1) / 2, ans);
lc[o] = rc[o] = (len - + MO) % MO;
return;
}
if(l == r) {
ans += (!vis[o]);
//if(!vis[o]) printf("[%lld %lld] ans++ = %lld \n", l, r, ans);
return;
}
LL mid = (l + r) >> ;
if((r - l + ) & ) mid--;
cal(l, mid, ls[o]);
cal(mid + , r, rs[o]);
/// cal
ans = (ans + lc[rs[o]] * rc[ls[o]] % MO) % MO;
//printf("[%lld %lld] ans += %lld * %lld = %lld \n", l, r, lc[rs[o]], rc[ls[o]], ans);
if(!vis[ls[o]]) {
ans = (ans + lc[rs[o]]) % MO;
//printf("[%lld %lld] ans += %lld = %lld \n", l, r, lc[rs[o]], ans);
}
if(!vis[rs[o]]) {
ans = (ans + rc[ls[o]]) % MO;
//printf("[%lld %lld] ans += %lld = %lld \n", l, r, rc[ls[o]], ans);
}
if(!vis[o]) ans++;
lc[o] = lc[ls[o]];
if(!vis[ls[o]]) {
lc[o] = (lc[o] + lc[rs[o]] + ) % MO;
}
rc[o] = rc[rs[o]];
if(!vis[rs[o]]) {
rc[o] = (rc[o] + rc[ls[o]] + ) % MO;
}
//printf("l = %lld r = %lld lc = %lld rc = %lld \n", l, r, lc[o], rc[o]);
return;
} int main() { //printf("%d", sizeof(lc) * 3 / 1048576); LL n; int m, root = ;
scanf("%lld%d", &n, &m);
for(int i = ; i <= m; i++) {
LL l, r;
scanf("%lld%lld", &l, &r);
add(l, r, 1ll, n, root);
}
cal(, n, root);
printf("%lld\n", ans);
return ;
}

AC代码

洛谷P5111 zhtobu3232的线段树的更多相关文章

  1. P5111 zhtobu3232的线段树

    P5111 zhtobu3232的线段树 维护左子树右子树的贡献和跨区间贡献 #include<bits/stdc++.h> using namespace std; typedef lo ...

  2. 【BZOJ】1012: [JSOI2008]最大数maxnumber /【洛谷】1198(线段树)

    Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...

  3. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

  4. 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)

    洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...

  5. 洛谷P4065 [JXOI2017]颜色(线段树)

    题意 题目链接 Sol 线段树板子题都做不出来,真是越来越菜了.. 根据题目描述,一个合法区间等价于在区间内的颜色没有在区间外出现过. 所以我们可以对于每个右端点,统计最长的左端点在哪里,刚开始以为这 ...

  6. 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay

    正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...

  7. 题解——洛谷P2781 传教(线段树)

    可以说是数据结构学傻了的典型案例了 昨天跳到这题上 然后思考了一下 噫!好!线段树裸题 然后打完板子,发现\(  n \le 10^9 \) 显然线段树直接做不太行 然后这题又只有普及的难度 然后我就 ...

  8. 洛谷P4198 楼房重建(线段树)

    题意 题目链接 Sol 别问我为什么发两遍 就是为了骗访问量 这个题的线段树做法,,妙的很 首先一个显然的结论:位置\(i\)能被看到当且仅当\(\frac{H_k}{k} < \frac{H_ ...

  9. 2018.08.16 洛谷P1471 方差(线段树)

    传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...

随机推荐

  1. Day 5-<补充> 类的的继承和查找顺序

    类的继承于查找顺序: 在py2中,不继承object的类为经典类,经典类继承查找:深度优先. 在py3中,默认继承object,所以python3中都是新式类,新式类的继承查找:广度优先. 类的特殊属 ...

  2. jquery选择基础

    1 元素选择器 之前不熟悉的是如: $("input.cls1"); 这种用法 2 属性选择器 包含name属性的input元素, 如 $("input[name]&qu ...

  3. 使用python库xlsxwriter库来输出各种xlsx文件

    功能性的文章直接用几个最简单的实现表达: xlsxwriter库的核心就是其Workbook对象. 创建一个指定名字的xlsx文件: import xlsxwriter filename = '/Us ...

  4. 设计模式笔记:开闭原则(OCP,The Open-Closed Principle)

    1. 开闭原则概述 开闭原则(OCP,The Open-Closed Principle)两个主要特征: (1)对扩展开放(open for extension):模块的行为的可以扩展的,当应用的需求 ...

  5. Map接口----Map中嵌套Map

    package cn.good.com; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impo ...

  6. HTTP协议 - 使用php模拟get/post请求

    首先 有个疑问, 是不是只有浏览器才能发送http 请求? 答案肯定是错的,第一篇就说了,http是由请求行,请求头,请求主体三个部分组成,那么我们可不可以用代码来模拟一下get和post请求呢: 首 ...

  7. How to sign app

    codesign --display --verbose=4 /applications/qq.app codesign --display --entitlements - /application ...

  8. sun.misc.BASE64Encoder----》找不到jar包的解决方法

    1.右键项目->属性->java bulid path->jre System Library->access rules->resolution选择accessible ...

  9. java 中的包概念

    Java 中的包package, 就是电脑中的文件夹.我们平时在工作中,文件太多时,都会新建文件夹进行分类管理,java 中的包也是类似的道理,当我们的类太多时,也需要进行分类管理,这时我们就会把类文 ...

  10. Nginx 反向代理接收用户包体方式

    陶辉91课 如果proxy_request_buffering 设置为on的时候是等待nginx读取完包体后再发送上游服务器 一般依赖于nginx处理能力  client_body_in_file_o ...