PKU 2352 Stars(裸一维树状数组)
题目大意:原题链接
就是求每个小星星左小角的星星的个数。坐标按照Y升序,Y相同X升序的顺序给出
由于y轴已经排好序,可以按照x坐标建立一维树状数组
关键是要理解树状数组中的c[maxn]数组的构成方式,例如c1=a1,c2=c1+a2,c3=a3,c4=c2+c3+a4,c5=a5,
c6=c5+a6,c7=a7,c8=c4+c6+c7+a8......
(可以发现当c[maxn]数组的下标为2的幂次方时,c[n]则为数组a[maxn]的前n项和)
具体请看树状数组的构成图
Sum(int i)表示对a[maxn]数组元素的求前i项和
#include<cstdio>
#include<cstring>
using namespace std;
int c[];
int cnt[];
int lowbit(int x)
{
return x&(-x);
}
void Add(int i,int val)
{
while(i<=){
c[i]+=val;
i+=lowbit(i);
}//i为下一个管辖i在内且即将要修改的c[maxn]数组元素下标
}
//返回s为横坐标为i的左下方的星星个数之和(同时也是该星星级数)
int Sum(int i)
{
int s=;
while(i>){
s+=c[i];
i-=lowbit(i);//i减掉自己管辖在内的星星数
}//i为下一个虽不被i管辖却即将要加和的c[maxn]数组元素下标
return s;
}
int main()
{
int n,x,y;
while(scanf("%d",&n)!=EOF){
memset(c,,sizeof(c));
memset(cnt,,sizeof(cnt));
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
int t=Sum(x);//+1是为了避免x=0,t为级数
cnt[t]++;
Add(x,);
}
for(int i=;i<n;i++)
printf("%d\n",cnt[i]);
}
return ;
}
PKU 2352 Stars(裸一维树状数组)的更多相关文章
- poj 3321 Apple Tree(一维树状数组)
题目:http://poj.org/problem?id=3321 题意: 苹果树上n个分叉,Q是询问,C是改变状态.... 开始的处理比较难,参考了一下大神的思路,构图成邻接表 并 用DFS编号 白 ...
- Wikioi 1080一维树状数组
半个月时间最终把那些杂七杂八的学完了,尽管学完也,也仅仅是有了个模板,自己手敲还是不太行.所以如今開始要疯狂刷题了! ! .!!! 这题裸的树状数组.曾经写那道<敌兵布阵>的时候写过,所以 ...
- 一维树状数组(HD1166)
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string.h> using namespace st ...
- HDU 1556 Color the ball (一维树状数组,区间更新,单点查询)
中文题,题意就不说了 一开始接触树状数组时,只知道“单点更新,区间求和”的功能,没想到还有“区间更新,单点查询”的作用. 树状数组有两种用途(以一维树状数组举例): 1.单点更新,区间查询(即求和) ...
- 树状数组-HDU1541-Stars一维树状数组 POJ1195-Mobile phones-二维树状数组
树状数组,学长很早之前讲过,最近才重视起来,enmmmm... 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据 ...
- Stars(BIT树状数组)
Stars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 5126 stars (四维偏序+树状数组)
题目大意:略 题目传送门 四维偏序板子题 把插入操作和询问操作抽象成$(x,y,z,t)$这样的四元组 询问操作拆分成八个询问容斥 此外$x,y,z$可能很大,需要离散 直接处理四维偏序很困难,考虑降 ...
- POJ 2352 Stars【树状数组】
<题目链接> 题目大意: 题目给出n个点,这些点按照y坐标的升序,若y相同,则按照x的升序顺序输入,问,在这些点中,左下角的点的数量分别在0~n-1的点分别有多少个,写出它们的对应点数. ...
- POJ-2352 Stars 树状数组
Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39186 Accepted: 17027 Description A ...
随机推荐
- 返回flag
//修改前namespace CleanCSharp.Errors.Dirty { public class SomeClass { public int DoSomeProcess(int? id) ...
- EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)
自己写实体可以完美解决这个问题.(支持时间格式自定义) 用匿名类型也可以. 设置上下文方法如下: (jz为数据库上下文对象) jz.Configuration.ProxyCreationEnabled ...
- 将数据写入TXT文件中,file_put_contents与fwrite
<?php header("content-type:text/html;charset=utf-8"); $file = './aa.txt'; ###判断是不是文件 if ...
- 设置两个WdatePicker的开始时间小于结束时间,结束时间大于开始时间
contract_start_date_id为开始时间ID contract_end_date_id为结束时间ID $("#contract_start_date_id").bin ...
- Spring配置文件总结
http://blog.csdn.net/zhejingyuan/article/details/41042789
- Hive将txt、csv等文本文件导入hive表
1.将txt文本文件放置hdfs目录下 2.登录hive并进入到指定数据库 3.创建表 create external table if not exists fun_user_external ( ...
- HashMap实现原理、核心概念、关键问题的总结
简单罗列一下较为重要的点: 同步的问题 碰撞处理问题 rehash的过程 put和get的处理过程 HashMap基础: HashMap的理论基础:维基百科哈希表 JDK中HashMap的描述:Has ...
- Java多线程实现自然同步(内含演示案例)
1.准备一个生产者类: public class Producer extends Thread{ private String name; private Market mkt; static in ...
- poj_1836 动态规划
题目大意 N个士兵排成一排,不是按照高度顺序排列.现在想要从中去掉几名士兵,从而使得队伍中剩余的士兵能够看到这排最左边或者最右边的那个士兵,某士兵能够看到最左边(或最右边)的士兵指这名士兵和最左边(或 ...
- C语言文件读写(结构体文件)
有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名) xiaoming ...