Color the ball HDU1556
这题整整debug了两个小时
不同组居然要初始化 本以为built函数里面已经初始化好了!!!!!
其他无需注意
#include<cstdio>
#include<cstring>
using namespace std;
int n,p,a,b,m,x,y,ans;
struct node
{
int l,r,w,f;
}tree[];
inline void build(int k,int ll,int rr)//建树
{
tree[k].l=ll,tree[k].r=rr;
if(tree[k].l==tree[k].r)
{
tree[k].w=;
return;
}
int m=(ll+rr)/;
build(k*,ll,m);
build(k*+,m+,rr);
tree[k].w=tree[k*].w+tree[k*+].w;
}
inline void down(int k)//标记下传
{
tree[k*].f+=tree[k].f;
tree[k*+].f+=tree[k].f;
tree[k*].w+=tree[k].f*(tree[k*].r-tree[k*].l+);
tree[k*+].w+=tree[k].f*(tree[k*+].r-tree[k*+].l+);
tree[k].f=;
}
inline void ask_point(int k)//单点查询
{
if(tree[k].l==tree[k].r)
{
ans=tree[k].w;
return ;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/;
if(x<=m) ask_point(k*);
else ask_point(k*+);
} inline void change_interval(int k)//区间修改
{
if(tree[k].l>=a&&tree[k].r<=b)
{
tree[k].w+=(tree[k].r-tree[k].l+)*y;
tree[k].f+=y;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/;
if(a<=m) change_interval(k*);
if(b>m) change_interval(k*+);
tree[k].w=tree[k*].w+tree[k*+].w;
}
int main()
{
while(scanf("%d",&n)==&&n)
{
memset(tree,,sizeof(tree));
build(,,n);
y=;
for(int i=;i<=n;i++)
{
scanf("%d%d",&a,&b);
change_interval();
}
for(x=;x<n;x++)
{
ans=;
ask_point();
printf("%d ",ans);
}
ans=;
ask_point();
printf("%d\n",ans);
}
return ;
}
可以用树状数组来做
普通的树状数组是改单点 求区间 或者改单点 求单点(做差)
但是树状数组也可以改区间 求单点 sum即为单点
每次更新为 参数~n 均+=val
#include <cstdio>
#include <cstring>
const int maxn = ;
int c[maxn],n;
int Lowbit(int x)
{
return x&(-x);
}
void update(int k,int x)
{
while(k <= n)
{
c[k] += x;
k += Lowbit(k);
}
}
int getsum(int x)
{
int sum = ;
while(x > )
{
sum += c[x];
x -= Lowbit(x);
}
return sum;
}
int main()
{
int a,b;
while(scanf("%d",&n)&&n!=)
{
memset(c,,sizeof(c));
for(int i=; i<n; i++)
{
scanf("%d%d",&a,&b);
update(a,);
update(b+,-);
}
for(int i=; i<n; i++)
printf("%d ",getsum(i));
printf("%d\n",getsum(n));
}
return ;
}
Color the ball HDU1556的更多相关文章
- (不用循环也可以记录数组里的数)Color the ball --hdu--1556
题目: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次 ...
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- HDU1556 Color the ball & 牛客 contest 135-I 区间 [差分标记]
一.差分标记介绍 差分标记用来解决针对区间(修改-查询)的问题,复杂度比线段树要更低.推荐这个博客. 例如,给数组中处于某个区间的数进行加减操作,然后查询某个位置上数的变化值. 二.HDU1556 C ...
- Color the ball(hdu1556)(hash)或(线段树,区间更新)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU1556 Color the ball(差分数组)题解
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU-1556:Color the ball(前缀和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- spring注解第06课 @Value
1.注入<bean>中的属性 支持3种类型的赋值 <bean id="person" class="com.model.Person"> ...
- JavaScript之对原生JavaScript对象及其原型扩展初探
Object对象: //扩展:对JavaScript原生对象的扩展 //原理:原型对象 Object.prototype.keys = function(){ var keys = []; for(v ...
- Git操作学习笔记
根据廖雪峰老师git教程学习整理 这里需要辨析一下概念.Github是代码托管平台,是协作的工具;而Git是版本控制工具.Git不需要联网,在本机就可以使用 集中式版本控制系统与分布式版本控制系统 S ...
- cetus系列~ 读写分离具体分析
一 简介:上一章我们讲了cetus的基本安装,这章继续分析cetus 二 分析 1 基本配置 1 开启主从延迟检测需在后端数据库创建库proxy_heart_beat和表tb_heartb ...
- k8s系列~mgr的应用
一 简介:今天咱们大体介绍下 这两者是如何联系的二 概念解析 pod:说下我的理解 1 pod通过yaml文件来封装docker本身+启动形式 2 pod可以运行多个docke ...
- id特性
每一个HTML元素都可以附带id特性,id特 <!DOCTYPE html> <!-- To change this license header, choose License H ...
- Docker镜像命令
①docker images [Options] 用途:列出本地主机上的镜像 Options说明: -a:列出本地所有的镜像(含中间映像层) -q:只显示镜像ID --digests:显示镜像的摘要信 ...
- string替换字符串,路径的斜杠替换为下划线
场景 替换某个路径的所有"\"为"_". 很多时候取证需要把恶意代码文件取回来,然后清除. 如果在D:\WEB\模板制作插件\需要覆盖\CodeColoring ...
- Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】
转自:http://blog.chinaunix.net/uid-20937170-id-3033633.html 学习了驱动程序的设计,感觉在学习驱动的同时学习linux内核,也是很不错的过程哦,做 ...
- flask_restplus(1)- 未完成
快速开始 本指南假设您对Flask有一定的了解,并且您已经安装了Flask和Flask- restplus.如果没有,则按照安装部分中的步骤操作. 初始化 与其他所有扩展一样,您可以使用应用程序对象初 ...