hdu1556(线段树)
来源:互联网 发布:巴以冲突 知乎 编辑:程序博客网 时间:2024/05/20 09:44
题意:
当N = 0,输入结束。
31 12 23 331 11 21 30
1 1 13 2 1
线段树:
这道题计数的时候不需要一定记到叶子节点(就靠这个来省时间)
最后返值得时候
tree[n*2].value+=tree[n].value;
tree[n*2+1].value+=tree[n].value;
就可以了
//
// main.cpp
// BALl
//
// Created by Mr.Xue on 17/7/19.
// Copyright © 2017年 Mr.Xue. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespacestd;
int ans[100005],m;
struct node
{
int l,r,value;
}tree[500000];
void buildTree(int l,int r,int n)
{
tree[n].l=l;
tree[n].r=r;
tree[n].value=0;
if(l==r)
return;
int mid=(l+r)/2;
buildTree(l,mid,n*2);
buildTree(mid+1,r,n*2+1);
}
void qurry(int l,int r,int n)
{
if(l==tree[n].l&&r==tree[n].r)
{
tree[n].value++;
return;
}
int mid=(tree[n].l+tree[n].r)/2;
if(mid>=r)
qurry(l,r,n*2);
else if(mid<l)
qurry(l,r,n*2+1);
else
{
qurry(l,mid,n*2);
qurry(mid+1,r,n*2+1);
}
}
void get(int n)
{
if(tree[n].l==tree[n].r)
{
ans[++m]=tree[n].value;
return;
}
tree[n*2].value+=tree[n].value;
tree[n*2+1].value+=tree[n].value;
get(n*2);
get(n*2+1);
}
int main()
{
int n,a,b;
while(scanf("%d",&n)&&n!=0)
{
m=0;
buildTree(1,n,1);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a,&b);
qurry(a,b,1);
}
get(1);
for(int i=1;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]);
}
return0;
}
- HDU1556 线段树入门
- 经典 hdu1556 线段树
- HDU1556 线段树
- HDU1556(线段树)
- HDU1556 - 线段树基础
- hdu1556(线段树)
- hdu1556 线段树 区间修改
- hdu1556 线段树更新区间
- hdu1556--刷气球--线段树
- HDU1556 Color the ball(线段树)
- hdu1556-color the ball 线段树
- hdu1556 Color the ball 线段树
- hdu1556 线段树区间更新 求单点
- hdu1556 Color the ball 线段树
- hdu1556树状数组&&线段树2种做法
- HDU1556 Color the ball 解题报告--线段树
- HDU1556:Color the ball(线段树区间更新)
- hdu1556 线段树段更新(简单题)
- ubuntu--串口调试助手
- 今天是胡编乱造的js课。(╯‵□′)╯︵┻━┻。
- 简单例子理解装饰器
- 导入excel数据到数据库
- Xcode 界面详解
- hdu1556(线段树)
- selenium+python 实现163邮箱自动发送
- fragment中的数据缓存
- DOM解析XML
- Idea编译Laya,FlashBuilder编译Laya
- BZOJ 1305: [CQOI2009]dance跳舞
- bootstrap-入门
- android logo 大小
- 【剑指offer】树的子结构