HDU1556 Color the ball & 牛客 contest 135-I 区间 [差分标记]
一、差分标记介绍
差分标记用来解决针对区间(修改-查询)的问题,复杂度比线段树要更低。推荐这个博客。
例如,给数组中处于某个区间的数进行加减操作,然后查询某个位置上数的变化值。
二、HDU1556 Color the ball
2.1题意
N个气球依次编号为1,2,3....N.每次给定2个整数a b(a <= b),从气球a开始到气球b依次给每个气球涂一次颜色。求查询每个气球被涂的次数。
2.2分析
这里所有初始值为0,最后答案就是经过差分标记得到的变化值。
2.3代码
# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
const int maxn = 1e5+;
int sum[maxn];
int N;
void Init()
{
memset(sum,,sizeof(sum));
}
void Solve()
{
int l,r;
for(int i=;i<N;i++)
{
scanf("%d%d",&l,&r);
sum[l]++;
sum[r+]--;
}
int res = ;
for(int i=;i<N;i++)
{
res += sum[i];
printf("%d ",res);
}
res += sum[N];
printf("%d\n",res);
}
int main()
{
while(scanf("%d",&N)!=EOF)
{
if(N==) break;
Init();
Solve();
}
return ;
}
三、牛客contest 135-I 区间(题面)
3.1题意
有一个n个元素的数组a,对a[L]-a[R]进行M次操作:将a[L]-a[R]内的元素都加上P,询问a[l]-a[r]内的元素之和
3.2分析
经过M次操作的元素值等于初始值加上变化值,所以用差分标记得到变化值最后输出时再与原始值相加即可。注意会爆int以及不要开多个大数组。
3.3代码
# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
const int maxn = 1e6+;
int n,M;
int a[maxn],sum[maxn];
void Init()
{
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(sum,,sizeof(sum));
}
void Solve()
{
int q,L,R,P,l,r;
for(int i=;i<M;i++)
{
scanf("%d%d%d%d",&q,&L,&R,&P);
if(q==)
{
sum[L] -= P;
sum[R+] += P;
}
else
{
sum[L] += P;
sum[R+] -= P;
}
}
scanf("%d%d",&l,&r);
long long ans = ;
long long res = ;
for(int i=;i<=r;i++)
{
res += sum[i];
if(i>=l) ans += res + a[i];
}
printf("%lld\n",ans);
}
int main()
{
while(scanf("%d%d",&n,&M)!=EOF)
{
Init();
Solve();
}
return ;
}
HDU1556 Color the ball & 牛客 contest 135-I 区间 [差分标记]的更多相关文章
- HDU1556 Color the ball(差分数组)题解
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...
- 牛客练习赛14 B 区间的连续段 (倍增)
链接:https://ac.nowcoder.com/acm/contest/82/B来源:牛客网 区间的连续段 时间限制:C/C++ 7秒,其他语言14秒 空间限制:C/C++ 262144K,其他 ...
- hdu1556 Color the ball
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- hdu1556 Color the ball 简单线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 简单的线段树的应用 直接贴代码了: 代码: #include<iostream> # ...
- hdu1556 Color the ball 线段树区间染色问题
都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...
- HDU1556:Color the ball(简单的线段树区域更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定 ...
- HDU1556 Color the ball [线段树模板]
题意:区间修改序列值,最后输出. //hdu1166 #include<iostream> #include<cstdio> #include<cstring> # ...
- 牛客网 223C 区区区间间间(单调栈)
题目链接:区区区间间间 题意:给出长度为n的数字序列ai,定义区间(l,r)的价值为, 请你计算出. 题解:单调栈求ai左边和右边第一个比它小的位置,需要减去ai的个数为$(R_i-i+1)*(i-L ...
随机推荐
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- Codeforces 662D International Olympiad【贪心】
比赛的时候后缀长度在4位以内的时候分类讨论了一下,其实他们完全是一个套路的..并不需要讨论. 然后没有考虑前导0的情况,就wa了.. 题目链接: http://codeforces.com/probl ...
- 【算法】BSGS算法
BSGS算法 BSGS算法用于求解关于x的模方程\(A^x\equiv B\mod P\)(P为质数),相当于求模意义下的对数. 思想: 由费马小定理,\(A^{p-1}\equiv 1\mod P\ ...
- LeetCode63 Unique Paths II
题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...
- BUAA 623 Chem is Try!
http://oj55.bianchengla.com/problem/623/ 好久没写过题解了,昨天做了一道挺恶心的题目,贴一下代码上来.看了一下提交状况,好像我的代码挺短的了,至少我找不到比我短 ...
- L05 Laravel 教程 - 电商实战
https://laravel-china.org/courses/laravel-shop https://laravel-china.org/topics/13206/laravel-shop-c ...
- 随机线性网络编码的C语言实现,实现可靠传输:原理(1)
线性方程组,大家都不陌生吧.来一组 A11 *X1 + A12 *X2 + A13 *X3 + A14 *X4 =Q1 A21 *X1 + A22 *X2 + A23 *X3 + A24 *X4 =Q ...
- Project Euler Problem 14-Longest Collatz sequence
记忆化搜索来一发.没想到中间会爆int #include <bits/stdc++.h> using namespace std; const int MAXN = 1000000; in ...
- logging.basicConfig函数
在UI自动化应用中,经常会出错,打log就是一个很重要的环节,python的logging.basicConfig函数 真是既方便,又简单,每次粘贴到用例前,就可以打log了. logging模块是 ...
- oracle用索引提高效率
索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最 ...