AT2442 フェーン現象 (Foehn Phenomena)
题目地址
题解
其实就是一个区间加,单点查询的问题
当然可以线段树/树状数组做,但是这两个做法要分类讨论所以代码会比较多
我们考虑一种更简便的做法
差分!
因为温度只和海拔差有关,这相当于题目赤裸裸的告诉我们要差分
那么我们考虑每次修改海拔对答案的影响
对于中间那一段,显然对答案的贡献是不会变的
会变的只有\(l,r+1\)这两个地方,分类讨论高低太麻烦了,我们可以先在答案中减去原来的数对答案的影响,再给答案加上修改后的数对答案的影响
代码语言即为
sum -= p(d[l]); d[l] += x; sum += p(d[l]);
//p为算影响的函数,d为差分数组,sum为答案
于是我们得到了一个预处理\(O(n)\),单次询问\(O(1)\)的算法
需要注意的一个点是,要特判\(r=n\)的情况,在这种情况下,我们只需要更改左端点即可
以及将差分数组和前缀和开longlong
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200010
int n, m, s, t;
ll a[N], d[N];
ll sum = 0;
ll p(ll x) { return x * (x > 0 ? s : t); }
int main() {
scanf("%d%d%d%d", &n, &m, &s, &t);
ll L; scanf("%lld", &L);
for(int i = 1; i <= n; i ++) {
scanf("%lld", &a[i]);
d[i] = a[i] - L; L = a[i];
sum += p(d[i]);
}
for(int i = 1; i <= m; i ++) {
int l, r; ll x;
scanf("%d%d%lld", &l, &r, &x);
sum -= p(d[l]); d[l] += x; sum += p(d[l]);
if(r == n) {printf("%lld\n", -sum); continue;}
sum -= p(d[r + 1]); d[r + 1] -= x; sum += p(d[r + 1]);
printf("%lld\n", -sum);
}
return 0;
}
AT2442 フェーン現象 (Foehn Phenomena)的更多相关文章
- 差分模版题(需理解才明白)AT2442 フェーン現象 (Foehn Phenomena)
https://www.luogu.org/problemnew/show/AT2442 #include <bits/stdc++.h> #define read read() #def ...
- 2019.2-2019.3 TO-DO LIST
DP P2723 丑数 Humble Numbers(完成时间:2019.3.1) P2725 邮票 Stamps(完成时间:2019.3.1) P1021 邮票面值设计(完成时间:2019.3.1) ...
- Jquery scrollTop animate 實現動態滾動到頁面頂部
這個方法之前都是用的錨點實現的,但是效果僵硬,動感不足! 之後參考了一些網站,發現都是用的js,於是自己想到用jquery 來做一個插件也來實現以下這個小功能. $.fn.backTop = func ...
- Nobel Lecture, December 12, 1929 Thermionic phenomena and the laws which govern them
http://www.nobelprize.org/nobel_prizes/physics/laureates/1928/richardson-lecture.pdf OWEN W. RICHARD ...
- Portal Page的呈現
先看一下在JSR168中提到的Portal page,可以了解一個Portal Page上大概有哪些element: OK...進入本次主題 PSML:PSML的全名是Portal Structure ...
- 可以支持jQuery1.10.1 的 fancybox 1.3.4, 並現在type為Ajax時,也可以定義窗口的大小。
官網上的 fancybox 1.3.4 太老了,不支持jQuery1.10.1,改動了一下源碼,現在可以支持了. type為Ajax時,也可以定義窗口的大小. $("#ajaxlink&qu ...
- linux下c++實現簡單的生產者消費者隊列模式
引言 生產者消費者是一個經典的模式 利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度 便於對生產者和消費者的修改 下面記錄的是一個經典的單一生產者多消費者的模式 設計思路 以隊列做為緩衝區 ...
- ASP.NET MVC 4.0 学习2-留言板實現
新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案 2,添加數據庫文件message.mdf Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊&quo ...
- 八皇后問題 (C語言递归實現 回溯法)
八皇后问题是一个以国际象棋为背景的问题:怎样可以在 8×8 的国际象棋棋盘上放置八个皇后,使得不论什么一个皇后都无法直接吃掉其它的皇后?为了达到此目的.任两个皇后都不能处于同一条横行.纵行或斜线上.現 ...
随机推荐
- css 扩大点击范围
业务场景:比如某个按钮大小已经固定了,但是需求点击按钮周边就可以触发点击事件. 设置一下before属性里面的height,width就是设置你要点击的范围. rem是css3中新增加的一个单位属性( ...
- 2017-2018-1 20155228 《信息安全系统设计基础》第六周学习总结&课下作业
20155228 2017-2018-1 <信息安全系统设计基础>第六周学习总结&课下作业 教材学习内容总结 异常及其种类 异常可以分为四类:中断(interrupt) ,陷阱(t ...
- 爬虫万金油,一鹅在手,抓遍全球:goose 简介!
GOOSE 现已弃用 经过多年的服务,GOOSE接口和支持它的MySQL数据现已弃用 . 在我们进行替换的同时,我们建议寻找一般查询功能的用户在http://rdf.geneontology.org上 ...
- pandas.io.common.CParserError: Error tokenizing data. C error: Expected 1 fields in line 526, saw 5
pandas.io.common.CParserError: Error tokenizing data. C error: Expected 1 fields in line 526, saw 5 ...
- 设计模式之Command(命令)(转)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
- 【函数封装】javascript判断是否是微信浏览器
//判断是否是微信浏览器的函数 function isWeiXin(){ //window.navigator.userAgent属性包含了浏览器类型.版本.操作系统类型.浏览器引擎类型等信息,这个属 ...
- C# 制作软件启动界面
制作一个软件的启动界面 1.新建一个工程,将默认生成界面作为启动界面. 2.添加一个Label和ProgressBar还有Timer控件 注意:在ProgressBar控件中需要设置它的style ...
- Python智能检测编码并转码
#安装包工具 $pip3 install chardet #直接打开文件,中文显示乱码 >>> import chardet >>> f = open('test. ...
- Hadoop学习笔记之五:HDFS功能逻辑(1)
Block Report DataNode会周期性(默认1小时)将自身节点全部block信息发送给NameNode,以让NameNode正确确维护block信息. 在Block Report的数据源D ...
- Django框架----模板语法
Django模板系统 官方文档 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 只需要记两种特殊符号: {{ }}和 {% %} 变量 ...