luoguP4231_三步必杀_差分

题意:N 个柱子排成一排,一开始每个柱子损伤度为0。接下来勇仪会进行M 次攻击,每次攻击可以用4个参数l,r ,s ,e 来描述:

表示这次攻击作用范围为第l个到第r 个之间所有的柱子(包含l ,r ),对第一个柱子的伤害为s ,对最后一个柱子的伤害为e 。

攻击产生的伤害值是一个等差数列。若l=1 ,r=5 ,s=2 ,e=10 ,则对第1~5个柱子分别产生2,4,6,8,10的伤害。

鬼族们需要的是所有攻击完成之后每个柱子的损伤度。

分析:等差数列差分后相当于区间加,再套一个差分可解。

差分套差分求两遍前缀和就是原数组。注意有几个需要差分的单点修改。

代码:

 1 // luogu-judger-enable-o2
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 using namespace std;
 6 #define LL long long
 7 #define N 10000002
 8 LL c[N];
 9 LL n,m;
10 void read(LL &x){
11     int f=1;x=0;char s=getchar();
12     while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
13     while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}x*=f;
14 }
15 int main(){
16     read(n),read(m);
17     LL l,r,s,t;
18     register int i;
19     for(i=1;i<=m;i++){
20         read(l),read(r),read(s),read(t);
21         if(l==r){
22             c[l]+=s;c[l+1]-=2*s;c[l+2]+=s;continue;
23         }
24         LL d=(t-s)/(r-l);
25         c[l]+=s;c[l+1]-=(s-d);c[r+1]-=((r-l)*d+s+d);c[r+2]+=((r-l)*d+s);
26     }
27     for(i=1;i<=n;i++){
28         c[i]+=c[i-1];
29     }
30     LL mx=0,sum=0;
31     for(i=1;i<=n;i++){
32         c[i]+=c[i-1];
33         mx=max(mx,c[i]);
34         sum^=c[i];
35     }
36     printf("%lld %lld",sum,mx);
37 }
38  

原文地址:https://www.cnblogs.com/suika/p/8457101.html

时间: 2024-11-09 17:07:14

luoguP4231_三步必杀_差分的相关文章

【Luogu】P4231三步必杀(差分,差分)

题目链接 郑重宣布我以后真的再也不会信样例了,三种写法都能过 另:谁评的蓝题难度qwq 蓝题有这么恐怖吗 两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案 看题解之后……第二次差分写跪,我脑子怕不是炸了 #include<cstdio> #include<cctype> #include<cstring> #include<cstdlib> #include<algorithm> #define maxn 10000020

P4231 三步必杀

P4231 三步必杀 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼族和其他妖怪们组成的小社会,一片其乐融融的景象. 诶,不远处突然出现了一些密密麻麻的小点,好像大颗粒扬尘一样. 离得近了点,终于看清楚了. 长着角的鬼们聚在一起,围观着另一只鬼的表演. 那”扬尘”,其实都是弹幕. 勇仪的招数之一,三步之内,所到之处弹幕云集,几乎没有生存可能. 为了强化这一技能,勇仪将对着一排柱

三步必杀

Solution Step 1 考试的时候SB想到了异或…… 首先复杂度肯定是线性,否则无法满足. Step 2 区间操作,考虑转为差分,变成单点操作. 那么如果 s=e ,就是普通的差分 如果不是,也就是差分数组每次加上同一个数,考虑维护差分数组的差分数组. 每次加上公差,最后统计. 修改 O(1) ,统计 O(N) ,可以承受 Step 3 #include<bits/stdc++.h> using namespace std; long long sum[10000005],d[1000

80后女孩买房三步走 短期增值是首步 资金 增值 理财_新浪财经_新浪网

三湘华声全媒体记者 梁兴 通讯员 王茜 [个案资料] 尹婵,今年28岁,是长沙一名普通的公司职员.步入社会5年以来,月收入一直在4500元左右,但因勤俭节约,月结余能达到3000元,年终奖5000元.目前有存款18万元,有"五险一金",无任何商业保险. 尹婵是土生土长的长沙姑娘,父母工资收入稳定.由于工作后仍和父母一起居住,不需要承担房租或房贷.虽然父母乐意提供食宿,但是尹婵不想做"啃老族",每月给父母800元"搭伙费". [财务诊断] 尹婵工作

三步实现 远程连接 阿里云SqlServer 2012 数据库服务器

前言:在使用 阿里云 上的一些产品时,遇到不少坑. 安装IIS 时,遇到 因买的配置过低,虚拟内存不足,而导致 IIS 总是安装失败: 现在 在上面安装了个 Sql Sever 2012,远程老是 不能连接,百度找半天,终于能够连接上了. 实现步骤如下: 1. 找到 安全组配置,打开 安全组配置,点击配置规则,增加 地址段访问的 授权规则,Sql Server的默认端口时 1433 . 2. 服务器上 win + R  键入  compmgmt.msc ,打开 计算机管理,按照如图所示 设置.注

redha7.2配置静态网卡(三步搞定)

三步搞定: 编辑网卡配置文件:vi /etc/sysconfig/network-scripts/ifcfg-eno16777736(也可能是eth0或eth1或者eth+任何数字) 当前是DHCP,如果要使用静态IP修改: BOOTPROTO=static                #声明IP地址获得的途径 ONBOOT=yes                          #开启自动启用网络连接 增加: IPADDR=192.168.1.1              #设置IP地址(

三步将Node应用部署到Heroku上 --转载

Heroku是一个提供快速部署服务的云平台.支持Node,Ruby,Java,PHP,Python,Go多种语言,今天体验了下,简直不要太爽.下面简单的介绍一下. 首先还是要注册一个账号:https://signup.heroku.com/login 不知道为什么,这里163邮箱不能通过,qq可以.然后选择语言Node.js. 注册成功后,激活邮箱,填写密码. 1.创建一个app 登录成功后进入面板,创建一个应用 名称是可选的 2.连接github 创建成功后,进入app的部署页面. 提供三种部

三步升级已安装的 Android SDK 和 ADT 插件(转载)

转载:http://www.tfan.org/update-adt-and-android-sdk-in-five-minutes/ 如何快速地把已安装的 Android SDK 及 Eclipse 的 ADT 插件升级到最新版本?同时又能保证之前下载的 Android API 和扩展可用.下面我们使用三步来完成更新操作. 第一步,升级 Android SDK 首先到 Google Android SDK 的下载页面下载最新的 SDK,注意是 “SDK tools only”,不要下载 ADT

三步创建Disruptor应用

Disruptor是一个高性能的用于线程间消息处理的开源框架.它的目标就是快. 我们知道,java.util.concurrent.ArrayBlockingQueue 是一个非常优秀的有界队列实现.Disruptor与之相比,性能更加的优秀. 性能比较 完整的性能报告在这里. Disruptor内部使用了RingBuffer,它是Disruptor的核心的数据结构.和其它的RingBuffer实现不同,Disruptor没有尾指针.这样实现是经过深思熟虑的,你可以看这篇文档了解其细节. 更多的