zoukankan      html  css  js  c++  java
  • 三步必杀 (差分)

    三步必杀 (话说这题居然被rqy秒了,% % %)

    题目链接

    题解链接

    题目

    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的伤害。

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

    分析

    一道差分好题。
    这题是一个二次差分题,这题的重点就在于第二次差分的赋值操作。
    建议模拟理解。 很快就能明白。
    代码 :

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N = 1e7 + 5;
    int a[N], c[N], d[N], n, m;
    signed main() {
    	std::ios::sync_with_stdio(false);
    	std::cin.tie(0);
    	cin >> n >> m;
    	for(int i = 1; i <= m; ++i) {
    		int l, r, s, t; cin >> l >> r >> s >> t;
    		int mid = (t - s) / (r - l);
    		d[l] += s, d[l + 1] += (mid - s), d[r+1] += (-t - mid), d[r + 2] += t;
    	} 
    	for(int i = 1; i <= n; ++i) {
    		d[i] = d[i-1] + d[i];
    	} int tmp = 0, ans = 0, ans2 = 0;
    	for(int i = 1; i <= n; ++i) {
    		tmp += d[i];
    		ans ^= tmp;
    		ans2 = max(ans2, tmp);
    	}
    	cout << ans << ' ' << ans2;
    	return 0;
    }
    
  • 相关阅读:
    go 注释/说明/文档 标注
    go stack object escape
    ubuntu virtualBox windows10 CPU占用100%
    git 团队合作
    git 修改远程pull和push地址
    go 项目编译失败
    fork函数 linux创建子进程
    51nod1183 编辑距离
    各种平衡树
    redis 配置多个ip 解决方案
  • 原文地址:https://www.cnblogs.com/DZN2004/p/13411962.html
Copyright © 2011-2022 走看看