hdu4970(线性区间更新的懒操作)
思路是求出从每一点出发走到终点分别要受到多少伤害,然后和每个怪兽的血量比一下。给一个数组,告了哪些区间需要更新,我需要的就是都更新以后每个点的伤害值是多少。不涉及到区间查询,没必要用线段树或树状数组(据说用了也会超时。。)。如果每个区间都一个for循环把对应的几个数更新了,必然超时。那么这里的技巧就是一种懒操作。需要a[l]到a[r]每个加d,那么我就标记a[l]+=d;a[r+1]-=d;几组更新都标好了以后,扫一遍数组,把这些信息加上就行了。时间复杂度O(n)。
这种技巧非常实用。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<map>
- #include<set>
- #include<vector>
- #include<algorithm>
- #include<stack>
- #include<queue>
- using namespace std;
- #define INF 1000000000
- #define eps 1e-8
- #define pii pair<int,int>
- #define LL long long int
- const int maxn=;
- int n,m,k,a[maxn],l,r,d,x[maxn];
- LL h[maxn],f[maxn];
- int main()
- {
- //freopen("in6.txt","r",stdin);
- while(scanf("%d",&n)==&&n)
- {
- memset(a,,sizeof(a));
- memset(f,,sizeof(f));
- scanf("%d",&m);
- for(int i=; i<=m; i++)
- {
- scanf("%d%d%d",&l,&r,&d);
- a[l]+=d;
- a[r+]-=d;
- }
- int t=;
- for(int i=; i<=n; i++)
- {
- if(a[i]!=)
- {
- t+=a[i];
- a[i]=t;
- }
- else
- a[i]+=t;
- }
- for(int i=n; i>=; i--)
- {
- f[i]=f[i+]+a[i];
- }
- //for(int i=1;i<=n;i++) cout<<a[i]<<','<<f[i]<<endl;
- int ans=;
- scanf("%d",&k);
- for(int i=; i<=k; i++)
- {
- scanf("%I64d%d",&h[i],&x[i]);
- if(f[x[i]]<h[i]) ans++;
- }
- printf("%d\n",ans);
- }
- return ;
- }
hdu4970(线性区间更新的懒操作)的更多相关文章
- POJ 3468 A Simple Problem with Integers (伸展树区间更新求和操作 , 模板)
伸展数最基本操作的模板,区间求和,区间更新.为了方便理解,特定附上一自己搞的搓图 这是样例中的数据输入后建成的树,其中的1,2是加入的边界顶点,数字代表节点编号,我们如果要对一段区间[l, r]进行操 ...
- HDU4578 线段树(区间更新 + 多种操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 , 线段树的区间更新 + 多种操作,好题. 虽然是比较裸的线段树,但是比较麻烦,并且有很多细节 ...
- hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新
#1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...
- hdu 3397 Sequence operation(线段树:区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意:给你一个长度为n的0,1序列,支持下列五种操作, 操作0(0 a b):将a到b这个区间的 ...
- 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)
题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- POJ 2155 Matrix(二维树状数组+区间更新单点求和)
题意:给你一个n*n的全0矩阵,每次有两个操作: C x1 y1 x2 y2:将(x1,y1)到(x2,y2)的矩阵全部值求反 Q x y:求出(x,y)位置的值 树状数组标准是求单点更新区间求和,但 ...
- NBOJv2 1004 蛤玮打扫教室(线段树区间更新区间最值查询)
Problem 1004: 蛤玮打扫教室 Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: %l ...
随机推荐
- 剑指offer 面试7题
面试7题: 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...
- C语言运算符优先级误解
优先级问题 表达式 可能误以为的结果 实际结果 .的优先级高于*. ->操作符用于消除这个问题 *p.f p所指对象的字段f. (*p).f 对p去f偏移,作为指针,然后进行解除引用操作. *( ...
- django.contirb
Django标准库 Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其 ...
- LeetCode:矩阵置零【73】
LeetCode:矩阵置零[73] 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], ...
- 在控制台中实现“单词竞猜”游戏 C# 猜词游戏
场景 设计规则 a) 这是一个单人玩的游戏. b) 可以分三个级别,分别是高级.中级.低级.不同级别对应的单词系列也不一样.要求一旦玩家选定了要玩的级别,应当先提示它关于此级别最高分是多少,是谁创下的 ...
- public,protected,privat区别
关于从基类继承来的方法和属性的保护: --class Pig:public Animal {...} C++不仅允许你对在类里定义的方法和属性实施访问控制,还允许你控制子类可以访问基类里的哪些方法和属 ...
- 无法处理文件 MainForm.resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记。要想处理这些文件,请删除 Web 标记
无法处理文件 MainForm.resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记.要想处理这些文件,请删除 Web 标记 问题: 由于文件锁定,VS不能正常读取. 解 ...
- 【Tech】SQL Server2008使用笔记
1.64位win7系统报错“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ”. 解决方法:从这个网址下载和安装一个驱动http://www.microsoft.com/zh- ...
- 使用JDK将tomcat变成https访问
1,今日JDK目录,执行命令 keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore " ...
- 数独C语言算法
备好:http://blog.chinaunix.net/uid-26456800-id-3380612.html