当前位置: 首页 > news >正文

luogu P1719 最大加权矩形

题目大意

需要支持在一个序列中插入等差数列
需要插入\(O(1)\) 最终统计答案\(O(n)\)
\(1\leq n\leq 1e7\)

Sol

对于一个序列如下:

0 0 4 6 8 10 12 0 0

我们将其进行一次差分,可以得到:

0 0 4 2 2 2 2 -12 0

可以发现中间出现了一串公差,在差分一次:

0 0 4 -2 0 0 0 -14 12

应该可以看出来,给定的四个数 \(l\),\(r\),\(s\),\(e\)以及公差\(d=\frac{e-s}{r-l}\)
其实就是在差分数组\(d\)中将

  • \(d_l\)\(s\)
  • \(d_{l+1}\)\(d-s\)
  • \(d_{r+1}\)\(d+e\)
  • \(d_{r+2}\)\(e\)

最后进行两次差分即可

Code

#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int N = 1e7+10;int n , m;
LL sum1[N] , sum2[N];int main() {scanf("%d%d" , &n , &m);for(int i = 1 ; i <= m ; i ++) {LL l , r , s , e , d = 0;scanf("%lld%lld%lld%lld" , &l , &r , &s , &e);if(r != l) d = (e-s)/(r-l);sum1[l] += s; sum1[l+1] += d-s;sum1[r+1]-=d+e; sum1[r+2]+=e;}LL res1 = 0 , res2 = 0;for(int i = 1 ; i <= n ; i ++) {sum1[i] += sum1[i-1];sum2[i] = sum2[i-1] + sum1[i];res1 ^= sum2[i];if(sum2[i] > res2) res2 = sum2[i];}printf("%lld %lld\n" , res1 , res2);return 0;
}
http://www.zskr.cn/news/13085.html

相关文章:

  • Laravel5.8 利用 snappyPDF 生成PDF文件
  • 数据结构——链表 - 详解
  • 25秋周总结4
  • 饥荒联机版
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(5——通过cpp-httplib库建立网页模块) - 详解
  • 微信二次开发文档
  • 【底层机制】Android标准C库为什么选择 bionic 而不是 musl【一】 - 详解
  • DiffDock 环境安装和启用教程
  • 20250927
  • 详细介绍:CTFshow系列——PHP特性Web113-115(123)
  • [题解]P11533 [NOISG 2023 Finals] Topical
  • [题解]P10231 [COCI 2023/2024 #4] Putovanje
  • WPF Prism register interface and service, view and viewmodel, IRegionManager, RequestNavigate
  • 让YOLO飞起来:从CPU到GPU的配置指南
  • 忘形篇
  • 1748:约瑟夫问题
  • 候机的队伍
  • Keil uVision5 设置 hex 输出路径,不放Objects目录下
  • 垃圾收集器G1ZGC详解
  • gen-ui-python
  • 2025国内裱纸机厂家最新推荐排行榜:聚焦智能高速与全自动机型,权威精选综合实力 TOP3 厂家
  • 使用Windbg分析dmp文件的方法以及实战分析实例分享 - 教程
  • Vivado兼容第三方软件工具对照表Modelsim,Questasim,Matlab
  • 2025 年电脑租赁公司最新推荐排行榜:深度解析 TOP3 优质租电脑公司,助企业个人租赁电脑选择指南
  • 完整教程:✨WPF编程基础【1.2】:XAML中的属性
  • 使用JOL查看对象布局
  • 短视频流量|基于SprinBoot+vue的短视频流量数据分析系统(源码+数据库+文档) - 指南
  • 一天一款实用的AI工具,第4期,AI翻译成英语
  • 初次尝试在kubernetes 1.31 上安装 人工智能模型运行平台 llm-d - 详解
  • 源码反码补码