三步必杀

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[10000005];
template <typename T>void read(T &x){
    int f=1;x=0;char c=getchar();
    for(;!isdigit(c);c=getchar())if(c==‘-‘)f=!f;
    for(; isdigit(c);c=getchar()) x=x*10+c-‘0‘;
    x*=f;
}
int n,m,l,r;
long long s,e,a[10000005];
int main(){
//  freopen("sequence.in","r",stdin);
//  freopen("sequence.out","w",stdout);
    read(n);read(m);
    while(m--){
        read(l);read(r);read(s);read(e);
        long long gc=(e-s)/(r-l);
        d[l+1]+=gc;d[r+1]-=gc;//差分数组的差分数组,从第二项到末项加上公差
        sum[l]+=s;sum[r+1]-=e;//差分数组本身两端进行修改
    }
    for(int i=1;i<=n;i++)
     sum[i]+=(d[i]+=d[i-1]);//统计差分数组
    long long ans=0,tmp=0,mx=0;
    for(int i=1;i<=n;i++)ans^=(tmp+=sum[i]),mx=max(mx,tmp);//统计原数组
    printf("%lld %lld",ans,mx);
    return 0;
}

原文地址:https://www.cnblogs.com/coder-cjh/p/11621759.html

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

三步必杀的相关文章

P4231 三步必杀

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

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

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

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的伤害. 鬼族们需要的是所有攻击完成之后每个柱子的损伤度. 分析:等差数列差分后相当于区间加,再套一个差分可解. 差分

三步实现 远程连接 阿里云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没有尾指针.这样实现是经过深思熟虑的,你可以看这篇文档了解其细节. 更多的

java入门第三步之数据库连接【转】

数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Database Connectivity(开放数据库连接性):基于C语言的一套数据库编程接口,主要功能是提供数据库的访问和操作所有的数据库厂商对这套接口进行实现,不同数据库厂商提供的实现是不一样的,也就是通常所说的第三方支持,而这套编程接口就是我们的标准 2.JDBC——Java Database Conn