嗯 第二道线段树题目 对左右节点和下标有了更深的理解 hdu1556
Color the ball
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16530 Accepted Submission(s): 8228
当N = 0,输入结束。
题目的大概意思就是记录每个气球的涂色次数 这里如果单独的去处理每个元素 恭喜你 tle
这里用线段树的思想 记录每一段被涂过的次数 然后最后从上向下找的时候 累加起来(子随父)
搞清这一点 这道题目就是一道简单的线段树的题目了 ps(这道题目让我对节点 下标 以及线段树的组成有了更深的理解----- 下标1代表第一大段 即原始段 2代表第一左字段 依次类推)
#include<cstdio>
#include<iostream>
#define maxn 1000010
using namespace std;
struct node
{
int l,r,num;
}stu[maxn*3 ];
int n,x,y;
void buildtree(int i,int l,int r)//i为线段树的节点
{
stu[i].l=l;
stu[i].r=r;
stu[i].num=0;//二分
if(l==r) return;
buildtree(i*2,l,(l+r)/2);
buildtree(i*2+1,(l+r)/2+1,r);
}
void updata(int x,int y,int i)//有点询问的意思
{
int l=stu[i].l;
int r=stu[i].r;
int mid=(l+r)/2;
if(l==x&&r==y)//把单个的元素涂色 看成一层的元素涂色
{
stu[i].num++;
return;
}
if(y<=mid) updata(x,y,i*2); //要掌握这个基本的搜索的过程 不断的分解
else if(x>mid) updata(x,y,i*2+1);
else
{
updata(x,mid,i*2);
updata(mid+1,y,i*2+1);
}
}
void que(int pos,int sum)//区分节点值 与下标 //这里的sum就是累加项目了 不断的进行累加 直到区间长度为一为止
{
int l=stu[pos].l;
int r=stu[pos].r;
int mid=(l+r)/2;
if(l==r)
{
if(l==1) printf("%d",stu[pos].num+sum);
else printf(" %d",stu[pos].num+sum);
return;
}
que(pos*2,stu[pos].num+sum);
que(pos*2+1,stu[pos].num+sum);
}
int main()
{
while(cin>>n)
{
if(n==0) break;
buildtree(1,1,n); while(n--)
{
cin>>x>>y;
updata(x,y,1);
}
que(1,0);
cout<<endl;
}
return 0;
}
嗯 第二道线段树题目 对左右节点和下标有了更深的理解 hdu1556的更多相关文章
- 【ACM/ICPC2013】线段树题目集合(一)
前言:前一段时间在网上找了一个线段树题目列表,我顺着做了一些,今天我把做过的整理一下.感觉自己对线段树了解的还不是很深,自己的算法能力还要加强.光练代码能力还是不够的,要多思考.向队友学习,向大牛学习 ...
- 线段树&&线段树的创建线段树的查询&&单节点更新&&区间更新
目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...
- Codeforces 438D (今日gg模拟第二题) | 线段树 考察时间复杂度的计算 -_-|||
Codeforces 438D The Child and Sequence 给出一个序列,进行如下三种操作: 区间求和 区间每个数模x 单点修改 如果没有第二个操作的话,就是一棵简单的线段树.那么如 ...
- 线段树 & 题目
首先说下我写的线段树吧. 我是按照线段树[完全版]那个人的写法来写的,因为网上大多数题解都是按照他的写法来写. 确实比较飘逸,所以就借用了. 节点大小是maxn是4倍,准确来说是大于maxn的2^x次 ...
- bzoj1012: [JSOI2008]最大数maxnumber(貌似是道线段树喔)
1012: [JSOI2008]最大数maxnumber 题目:传送门 题解: 发现自己空了一道水题... 1~210000建线段树,其实就是一道裸题... 单点修改+区间查询...1A~ 代码: # ...
- HDU 4614 Vases and Flowers (2013多校第二场线段树)
题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ 题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每 ...
- HDU6602 Longest Subarray hdu多校第二场 线段树
HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...
- Balanced Lineup(最简单的线段树题目)
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 33389 Accepted: 15665 Case Time Limit ...
- hdu 1166敌兵布阵(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) M ...
随机推荐
- Delphi BASE64单元EncdDecd的修改
Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...
- 咏南中间件新增MORMOT插件功能
咏南中间件新增MORMOT插件功能 咏南中间件支持DATASNAP和MORMOT两种通讯框架. 原来已经支持DATASNAP插件,现在又增加了MORMOT插件,已经支持DATASNAP和MORMOT两 ...
- Feed流系统设计-总纲
https://mp.weixin.qq.com/s/ccxM2thPbzg5vDWgGVJ5vQ 作者:少强 简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代 ...
- C# 怎么生成DLL文件(转)
有两种方法: 但是一般这个使用 打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...
- sql日期比较
sql 中 datetime日期类型字段比较 mysql 可以直接用大于号,也可以用 between and SELECT * FROM staff WHERE UPDATE_DATE >= ...
- python基础之坑爹正则表达式
python基础之坑爹正则表达式 概述 re模块就是python语言中的正则表达式,拆出来单独写一条blog是因为正则表达式本身就是比较庞大的知识,写具体些让自己以后方便查找. IP: ^(25[0- ...
- C++: Unresolved external symbol __imp__fscanf
VS2019中遇到错误error LNK2001: unresolved external symbol __imp__fscanf 解决办法:链接legacy_stdio_definitions.l ...
- iOS的多线程技术
iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ØN ...
- <configSections> 位置引起的错误
今天在配置一个项目的时候,花了挺长时间配置完成,然后一启动项目,懵了,启动报错:错误显示 Configuration Error Description: An error occurred duri ...
- jquery iframe取得元素与自适应高度
总结一下iframe在jquery中怎么操作的,下面我来给各位介绍jquery 获取iframe子/父页面的元素及iframe在jquery高度自适应实现方法,各位朋友可参考. jquery方法: 在 ...