题意:

长度为1e91e9的(1,−1)(1,−1)序列,下标从00到1e9−11e9−1,已知有nn个区间为11,其他为−1−1, 问存在多少个区间的和>1>1(保证∑1≤i≤nr[i]−l[i]+1≤1e7∑1≤i≤nr[i]−l[i]+1≤1e7).

给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段.

题解

  • 可能作为区间端点的点个数最多为3e73e7
  • f[i]表示以第ii个区间右端点为答案右端点的最大区间和
  • g[i]表示以第ii个区间左端点为答案左端点的最大区间和
  • f[i]=max(0,f[i−1]−(l[i]−r[i−1]−1))+r[i]−l[i]+1
  • g[i]=max(0,g[i+1]−(l[i+1]−r[i]−1))+r[i]−l[i]+1
  • 如果f[i]+g[i+1]≥l[i+1]−r[i]−1,说明答案的左右端点可以跨越[r[i]+1,l[i+1]−1],那么把这些合并考虑
  • 搞完上面,问题就变成了给你一个长度不超过3e7的(1,−1)序列,问有多少区间和大于1
  • 树状数组时间O(n∗logn),稳T
  • 考虑优化:
  • 很好用的性质:每次查询与上次查询的差距等于1
  • 从左到右枚举左端点,统计右边比当前值大的个数
  • 加个标记,标记左移,稳
#include <iostream>
using namespace std; const int N = 1e6 + ;
const int M = 4e7 + ; typedef long long ll;
int l[N], r[N], L[N], R[N];
ll num[M]; int main() {
int n;
cin >> n;
for (int i = ; i <= n; i++) {
cin >> l[i] >> r[i];
}
l[] = r[] = L[] = R[] = -, l[n + ] = r[n + ] = 1e9;
int len = ;
for (int i = ; i <= n; i++) {
len += r[i] - l[i] + ;
R[i] = min(r[i] + len, l[i + ] - );
len -= l[i + ] - r[i] - ;
if (len < )
len = ;
}
len = ;
for (int i = n; i >= ; i--) {
len += r[i] - l[i] + ;
L[i] = max(l[i] - len, r[i - ] + );
len -= l[i] - r[i - ] - ;
if (len < )
len = ;
}
int now = 2e7 + ;
ll sum = ;
num[now] = ;
ll ans = ;
for (int i = ; i <= n; i++) {
for (int j = max(L[i], R[i - ] + ); j <= R[i]; j++) {
if (j >= l[i] && j <= r[i]) {
sum += num[now];
num[++now]++;
} else {
sum -= num[--now];
num[now]++;
}
ans += sum;
}
}
cout << ans << endl;
return ;
}

团队通过代码

参考博客:

https://blog.csdn.net/qq_40791842/article/details/96736137

https://blog.csdn.net/qq_40871466/article/details/97104326

https://blog.csdn.net/toohandsomeieaseid/article/details/98848517

https://www.cnblogs.com/Yinku/p/11221494.html

https://www.cnblogs.com/wmj6/p/11288038.html

最新文章

  1. 在vim中使用查找命令查找指定字符串
  2. [NOIP2012] 提高组 洛谷P1082 同余方程
  3. 51Nod 1378 夹克老爷的愤怒
  4. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
  5. CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
  6. Python之创建tuple和“可变”的tuple
  7. 安装CDH4 (Cloudera Distribution Hadoop)步骤
  8. ElasticSearch Remote Code Execution (CVE-2014-3120)
  9. sql删除wordpress没用的postmeta记录
  10. eclipse git插件配置
  11. des和Rijndael加密
  12. 性能测试培训:Ajax接口级性能测试之jmeter版
  13. JAVA_SE基础——62.String类的构造方法
  14. vue 学习小记
  15. 输入,输出与Mad Libs游戏
  16. django之数据库表的单表查询
  17. CentOS7.x系统中使用Docker时,在存储方面需要注意的问题
  18. NPOI创建DOCX常用操作
  19. poi导出excel合并单元格(包括列合并、行合并)
  20. 原生JS实现全选,反选

热门文章

  1. django-Views之使用视图渲染模板(五)
  2. CSS盒子模型+box-sizing
  3. PHP 输出XML字符串
  4. Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
  5. 使用Beautiful Soup
  6. RocketMQ 消息发送system busy、broker busy原因分析与解决方案
  7. (十二)golang--进制和位运算
  8. 『图论』LCA最近公共祖先
  9. python经典算法题:无重复字符的最长子串
  10. golang 服务诡异499、504网络故障排查