题意:求坐标0到x间的点的个数

思路:线段树,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可。

注意:线段树下标从1开始,所以把所有的x加1存储。

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; #define MAXN 32005
#define MAXL 15005
int ans;
int lev[MAXL]; struct node{
int left,right,sum;
int mid(){
return (left+right)>>;
}
}tree[MAXN*];//注意范围,4倍空间 void btree(int left,int right,int rt){//建树
tree[rt].left=left;
tree[rt].right=right;
if(left==right){
//scanf("%d",&tree[rt].sum);
tree[rt].sum=;
return;
}
int mid=tree[rt].mid();
btree(left,mid,rt<<);
btree(mid+,right,rt<<|);
tree[rt].sum=tree[rt<<].sum+tree[rt<<|].sum;//区间里的点数=左区间+右区间
} void query(int left,int right,int rt,int L,int R){//询问求和
if(L<=left&&right<=R){
ans+=tree[rt].sum;
return;
}
int mid=tree[rt].mid();
if(R<=mid)query(left,mid,rt<<,L,R);//区间在左子树
else if(L>mid)query(mid+,right,rt<<|,L,R);//区间在右子树
else{
query(left,mid,rt<<,L,R);
query(mid+,right,rt<<|,L,R);
}
} void update(int left,int right,int rt,int pos,int add){//单点更新函数
if(left==right){
tree[rt].sum+=add;
return;
}
int mid=tree[rt].mid();
if(pos<=mid)update(left,mid,rt<<,pos,add);//点在左子树
else update(mid+,right,rt<<|,pos,add);//点在右子树
tree[rt].sum=tree[rt<<].sum+tree[rt<<|].sum;//区间和更新
} int main(){
int n,x,y,i;
while(~scanf("%d",&n)){
btree(,MAXN,);
memset(lev,,sizeof(lev));
for(i=;i<n;++i){
scanf("%d%d",&x,&y);
++x;//线段树从1开始
ans=;
query(,MAXN-,,,x);
++lev[ans];//先求和
update(,MAXN-,,x,);//后加1
}
for(i=;i<n;++i)
printf("%d\n",lev[i]);
}
return ;
}

hdu 1541 Stars(线段树单点更新,区间查询)的更多相关文章

  1. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  2. hdu 2795 Billboard 线段树单点更新

    Billboard Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ...

  3. NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询

    RMQ with Shifts 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 ->  Link1  <- -> Link2  <- 以上两题题意是一样 ...

  4. hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询

    单点更新 区间查询 #include <bits/stdc++.h> using namespace std; #define m ((l+r)/2) #define ls (rt< ...

  5. HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值

    Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...

  7. HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. HDU 3308 LCIS(线段树单点更新区间合并)

    LCIS Given n integers. You have two operations: U A B: replace the Ath number by B. (index counting ...

  9. HDU1166(线段树单点更新区间查询)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. CDOJ 1073 线段树 单点更新+区间查询 水题

    H - 秋实大哥与线段树 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit S ...

随机推荐

  1. Java-在线聊天系统-线程

    一.概述 1.目标:在上一个版本非线程的聊天系统中,出于要不断监听接收新client和接收client发出的信息,把accept()和DataInputStream.readUTF()分别写在了whi ...

  2. unbuntu下vnc和vnc2swf的使用

    安装:sudo apt-get install vnc4server,vncviewer 默认vnc2swf安装了的. pyvnc2swf的说明文档:http://www.unixuser.org/~ ...

  3. POSIX、XNU

    POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEE ...

  4. webapp 开发之iScroll 学习

    demo.html <!doctype html> <html lang="en"> <head> <meta charset=" ...

  5. 解决 ko mapping 数组无法添加新对象的问题

    这两天页面模板化的进程有些放缓,使用 ko mapping 插件的情形多了起来.组员经常问到的问题即是往 ko mapping 数组添加新对象时,报找不到方法的错误:而使用 ko.observable ...

  6. linux目录

    转自:http://www.educity.cn/it/linux/201002040848221715.htm 对于linux新手来说,最感到迷惑的问题之一就是文件都存在哪里呢?特别是对于那些从wi ...

  7. Android HTTPS(2)HttpURLConnection.getInputStream异常的原因及解决方案

    Common Problems Verifying Server Certificates InputStream in = urlConnection.getInputStream(); getIn ...

  8. android--多View切换viewpager

    网上看到viewpager的多view动画切换,模仿制作了一个  学习到了. 先看效果图:      先看主类的layout <LinearLayout xmlns:android=" ...

  9. POJ 1436 (线段树 区间染色) Horizontally Visible Segments

    这道题做了快两天了.首先就是按照这些竖直线段的横坐标进行从左到右排序. 将线段的端点投影到y轴上,线段树所维护的信息就是y轴区间内被哪条线段所覆盖. 对于一条线段来说,先查询和它能相连的所有线段,并加 ...

  10. 51nod1215 数组的宽度

    傻叉单调栈 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> ...