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

  题目链接

  郑重宣布我以后真的再也不会信样例了,三种写法都能过

  另:谁评的蓝题难度qwq  蓝题有这么恐怖吗

  两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案

  看题解之后……第二次差分写跪,我脑子怕不是炸了

  

#include<cstdio>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define maxn 10000020
using namespace std;
inline long long read(){
    long long num=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch==‘-‘)    f=-1;
        ch=getchar();
    }
    while(isdigit(ch)){
        num=num*10+ch-‘0‘;
        ch=getchar();
    }
    return num*f;
}

long long xum;
long long sum[maxn];
long long tag[maxn];
long long mxn;

int main(){
    int n=read(),m=read();
    for(int i=1;i<=m;++i){
        long long l=read(),r=read(),s=read(),e=read();
        long long d=(e-s)/(r-l);
        sum[l]+=s;sum[r+1]-=e;    tag[l+1]+=d;    tag[r+1]-=d;
    }
    for(int i=1;i<=n;++i){
        tag[i]+=tag[i-1];
        sum[i]+=sum[i-1]+tag[i];
        xum^=sum[i];
        mxn=max(mxn,sum[i]);
    }
    printf("%lld %lld\n",xum,mxn);
    return 0;
}

原文地址:https://www.cnblogs.com/cellular-automaton/p/8450288.html

时间: 2024-10-31 01:54:00

【Luogu】P4231三步必杀(差分,差分)的相关文章

P4231 三步必杀

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

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

三步必杀

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

Luogu P1600 天天爱跑步 树上差分

Luogu P1600 天天爱跑步 ### 树上差分 题目链接 树上问题 没看出怎么差分 被观察到的条件有两个 lca前一半(包括lca) \(d[S_i]-d[x]=w[x]\) \(d[i]\)表示节点深度 lca后一半 \(d[S_i]+d[x]-2*d[lca(S_i,T_i)]=w[x]\) 但是具体怎么实现这个公式?? 实现 \(d[S_i]=w[x]+d[x]\) 可以转化为线段树合并模型 在\(S_i\)到\(lca\)的路径上增加\(d[S_i]\)的价值 最后求出各点的\(w

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