hdu 1541 Stars(线段树单点更新,区间查询)
题意:求坐标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(线段树单点更新,区间查询)的更多相关文章
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 2795 Billboard 线段树单点更新
Billboard Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ...
- NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 -> Link1 <- -> Link2 <- 以上两题题意是一样 ...
- hihoCoder week19 RMQ问题再临-线段树 单点更新 区间查询
单点更新 区间查询 #include <bits/stdc++.h> using namespace std; #define m ((l+r)/2) #define ls (rt< ...
- HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...
- HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 3308 LCIS(线段树单点更新区间合并)
LCIS Given n integers. You have two operations: U A B: replace the Ath number by B. (index counting ...
- HDU1166(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- CDOJ 1073 线段树 单点更新+区间查询 水题
H - 秋实大哥与线段树 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit S ...
随机推荐
- oracle11g 修改字符集 修改为ZHS16GBK
1.cmd下,cd到oracle数据库软件的服务器端 如:D:\app\Administrator\product\11.2.0\dbhome_1\BIN 2.输入set ORACLE_SID=你想进 ...
- Spring框架学习 - 配置
[资料] ★★☆ Spring 中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.Servl ...
- Passing JavaScript Objects to Managed Code
Silverlight If the target managed property or input parameter is strongly typed (that is, not typed ...
- hdu 1829-A Bug's LIfe(简单带权并查集)
题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...
- R语言记录程序运行的时间
f <- function(start_time) { start_time <- as.POSIXct(start_time) dt <- difftime(Sys.time(), ...
- c#开源Excel操作库--NPOI
前言 以前也用C#操作过excel,用的是OleDb或者offic的com组件,但是总是非常的麻烦,依赖限制较多,所以果断寻找开源方案,JAVA上面已经有非常成熟的POI,就这样,找到了移.Net的移 ...
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...
- jint
nuget地址 https://www.nuget.org/packages/Jint/ github上源代码 https://github.com/sebastienros/jint
- 【笨嘴拙舌WINDOWS】GDI对象之位图
GDI对象在windows中可以描述成为一次绘画操作时可使用的抽象工具.包括(画笔.画刷.字体.区域.调色板.位图等) GDI对象里的对象概念和在编程领域中面向对象编程的对象概念是不一样的! GDI对 ...
- 基于EasyUi的快速开发框架
先看图,下边这个简单的增.删.改.查,如果自己写代码实现,这两个页需要多少行代码? 如果再有类似的增.删.改.查,又需要多少行代码? 我最近搞的这个快速开发框架中,代码行数不超过100. 两页的代码如 ...