luogu P4231 三步必杀
这道题就是区间加一个等差数列,然后最后求每一个数的值。
O(n)做法:二阶差分。
其实就是差分两遍。举个例子 0 0 0 0 0 0 0,变成了 0 2 4 6 8 0 0。第一遍差分:0 2 2 2 2 -8 0,然后在这个差分数组上在进行差分,得到 0 2 0 0 0 10 8,完事。
我们在用通项搞一遍:等差数列的首项是s,末项是e,公差是d,则
最终的样子:0 s s+d s+2d e 0 0,
第一遍差分:0 s d d d -e 0,
第二遍差分:0 s d-s 0 0 -e-d e 。
所以我们只用维护四个值就行了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = 1e7 + ;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = ans * + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) x = -x, putchar('-');
if(x >= ) write(x / );
putchar(x % + '');
} int n, m;
ll dif[maxn], sum = , Max = -INF; int main()
{
n = read(); m = read();
for(int i = ; i <= m; ++i)
{
int L = read(), R = read(), s = read(), e = read();
int d = (e - s) / (R - L);
dif[L] += s; dif[L + ] += d - s;
dif[R + ] -= e + d; dif[R + ] += e;
}
for(int i = ; i <= n; ++i) dif[i] = dif[i - ] + dif[i];
for(int i = ; i <= n; ++i)
{
dif[i] = dif[i - ] + dif[i];
sum ^= dif[i];
Max = max(Max, dif[i]);
}
write(sum); space; write(Max); enter;
return ;
}
luogu P4231 三步必杀的更多相关文章
- Luogu P4231 三步必杀 (差分)
目录 题目 题解 题目 题目链接 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼 ...
- 【luogu P4231 三步必杀】 题解
题目链接:https://www.luogu.org/problemnew/show/P4231 诶 我很迷啊..这跟树状数组有什么关系啊...拿二阶差分数组过了..? #include <cs ...
- 【Luogu】P4231三步必杀(差分,差分)
题目链接 郑重宣布我以后真的再也不会信样例了,三种写法都能过 另:谁评的蓝题难度qwq 蓝题有这么恐怖吗 两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案 看题解之后……第二次差 ...
- 洛谷P4231 三步必杀
题目描述: $N$ 个柱子排成一排,一开始每个柱子损伤度为0. 接下来勇仪会进行$M$ 次攻击,每次攻击可以用4个参数$l$ ,$r$ ,$s$ ,$e$ 来描述: 表示这次攻击作用范围为第$l$ 个 ...
- P4231 三步必杀
题目描述 问题摘要: N个柱子排成一排,一开始每个柱子损伤度为0. 接下来勇仪会进行M次攻击,每次攻击可以用4个参数l,r,s,e来描述: 表示这次攻击作用范围为第l个到第r个之间所有的柱子(包含l, ...
- luoguP4231_三步必杀_差分
luoguP4231_三步必杀_差分 题意:N 个柱子排成一排,一开始每个柱子损伤度为0.接下来勇仪会进行M 次攻击,每次攻击可以用4个参数l,r ,s ,e 来描述: 表示这次攻击作用范围为第l个到 ...
- [Luogu]三步必杀
Description Luogu4231 Solution 我最近到底怎么了,这种题都做不出来了,一看题第一反应李超线段树(虽然不会),觉得不可做,看一眼题解才发现这个题可以差分,然后差分还打错了好 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
随机推荐
- IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
本主题概述 ASP.NET 应用程序的生命周期,列出了重要的生命周期事件,并描述了您编写的代码将如何适应于应用程序生命周期.本主题中的信息适用于 IIS 5.0 和 IIS 6.0.有关 IIS 7. ...
- Razor 将C#对象转换成Javascript对象, json还原被转码的字符 "·· HTML转义符
Razor 将C#对象转换成Javascript对象 在Razor中使用Json字符串,特殊字符被自动转义(如:\"->") @{ var jsonStr = Html.Ra ...
- 出现多个sessid
这种情况我也出现了,很郁闷.这是每次请求页面,都生成一个存PHPSESSID的cookie,cookie路径的问题,可以发现你这几个PHPSESSID的Path都不一样.我修改Thinkphp的配置文 ...
- angularJS请求参数 ajax
1. 使用angular服务请求 app.controller('main', function($scope, $http) { $scope.fun1 = function () { $http( ...
- 手机UA识别
整理手机UA识别如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- SSRS使用MySql作为数据源遇到的问题。
因为工作需求,SSRS需要取到MySql数据源,还好有了ODBC. 谷歌了很多,都是不完整的Solution,放上完整版的供大家评价参考. 下面是StepByStep. 问题1.使用ODBC数据源,填 ...
- 深入理解javascript原型和闭包_____全部
http://www.cnblogs.com/wangfupeng1988/p/3977924.html
- jquery中的$().each和$.each的区别
jquery中的$().each和$.each的区别 注意:jquery中的$().each和$.each的区别,前者只能遍历数组,后者可以遍历数组和对象 备注:sinobook项目中地名本体相关地按 ...
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:unpack (unpack) on project sq-integral-web: Unable to find artifact.
1.问题描述 项目maven打包报上述错误, 但是小伙伴运行好使. 2.问题解决 是idea工程编码(gbk)和项目编码(utf-8)不一致 idea->file->Other Setti ...
- Linux基础之-网络配置,主机名设置,ssh登陆,scp传输
一. 网络配置修改 1.临时修改(ip,dns,netmask,gateway) 临时修改网络配置,只要没有涉及到修改配置文件的,在network服务重启后,所有设置失效 2.永久修改(ip,dns, ...