嗯 第二道线段树题目 对左右节点和下标有了更深的理解 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 ...
随机推荐
- Cross-Site Request Forgery (CSRF)
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) Overview Cross-Site Request Forger ...
- python代码-leetcode1 两数相加
1.两个循环 class Solution: def twoSum(self, nums, target): n=len(nums) for i in range(n): for j in range ...
- 建站之星v2.7快速更换模版
网站建设很多人使用建站之星因为它的拖拽功能非常友好.但是很多人不会使用建站之星更换模版,网上的教程又复杂难懂,现在教大家一个简单快捷的办法. 方法/步骤 废话不多说,从模版目录找到你喜欢的模版 ...
- vmware安装密钥
VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMware Workstation 14永久激活密钥: CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ...
- nginx多个if条件并且查询
set $flag 0; if (!-e $request_filename){ set $flag "${flag}1"; } if ($uri ~* "^(.* ...
- laravel console handle 传参方法
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use App\Libs\wxpay\CLogFile ...
- 看看BeginInvoke的用法,亲爱的们
看看它是杂带参数的哈 using System; using System.Threading; class MyTest { delegate bool deleTest(string a,stri ...
- render()中添加js函数
方案一: { title: '操作', key: 'operation', render: (_, record) => ( <div> <Link to={`/hostMai ...
- SQL Server数据同步交换
一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路. TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...
- pip3快速下载paddle
安装百度的paddle paddle时很慢,后来采用国内的源,速度嗖嗖滴 pip3 install -U paddlepaddle -i https://pypi.douban.com/simple/ ...