题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1541

题目大意 :

在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0<=x 且y0<=y。如果左下位置有a个星星,就表示这个星星属于level x

按照y递增,如果y相同则x递增的顺序给出n个星星,求出所有level水平的数量。

解题思路:

题目已将排好序输入,所以可以不用排序

在y递增的时候,树状数组来维护x坐标,每次输入一个坐标的时候,求出当前有多少个x小于等于当前的x,那就是该点的等级,所以直接用树状数组求出小于等于x的数目,求出该点等级之后,再把这点的x坐标加入树状数组。

为什么求出当前有多少个x小于等于当前的x,那就是该点的等级呢

因为题目输入的y是递增的,y相等的时候x递增,这样的话每次放入一个点,前面所有的点的y都是小于等于该点的y,所以只要数一下x就可以了

注意:

树状数组的上限是x坐标的上限,不是n。这一点很重要

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<list>
#include<deque>
#include<sstream>
#include<cctype>
#define REP(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, s, t) for(int i = (s); i < (t); i++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = ;
const double eps = 1e-;
const int INF = << ;
const int dir[][] = {,,,,,-,-,};
const double pi = 3.1415926535898;
int n;
int d[maxn], ans[];
int lowbit(int x)
{
return (x & -x);
}
int sum(int x)
{
int tot = ;
while(x > )
{
tot += d[x];
x -= lowbit(x);
}
return tot;
}
void add(int x, int t)
{
while(x <= maxn)///这里maxn是d数组的上限
{
d[x] += t;
x += lowbit(x);
}
}
int main()
{
while(cin >> n)
{
int x, y;
memset(d, , sizeof(d));
memset(ans, , sizeof(ans));
FOR(i, , n)
{
cin >> x >> y;
x++;//x不可以为0,如果为0会使得树状数组进入无限循环而超时
ans[sum(x)]++;
add(x, );
}
FOR(i, , n)cout << ans[i] << endl;
}
}

POJ-2352 && hdu-1541 Stars---树状数组的运用的更多相关文章

  1. POJ 2352 &amp;&amp; HDU 1541 Stars (树状数组)

    一開始想,总感觉是DP,但是最后什么都没想到.还暴力的交了一发. 然后開始写线段树,结果超时.感觉自己线段树的写法有问题.改天再写.先把树状数组的写法贴出来吧. ~~~~~~~~~~~~~~~~~~~ ...

  2. hdu 1541 (基本树状数组) Stars

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1541 n个星星的坐标,问在某个点左边(横坐标和纵坐标不大于该点)的点的个数有多少个,输出n行,每行有一个数字 ...

  3. HDU 1541 STAR(树状数组)

    Stars Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)

    点我看题目 题意 :N个村子连成一条线,相邻的村子都有直接的地道进行相连,不相连的都由地道间接相连,三个命令,D x,表示x村庄被摧毁,R  ,表示最后被摧毁的村庄已经重建了,Q x表示,与x直接或间 ...

  5. Stars(树状数组)

    http://acm.hdu.edu.cn/showproblem.php?pid=1541 Stars Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  6. hdu1541 Stars 树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541 题目大意就是统计其左上位置的星星的个数 由于y已经按升序排列,因此只用按照x坐标生成一维树状数组 ...

  7. H - Buy Tickets POJ - 2828 逆序遍历 树状数组+二分

    H - Buy Tickets POJ - 2828 这个题目还是比较简单的,其实有思路,不过中途又断了,最后写了一发别的想法的T了. 然后脑子就有点糊涂,不应该啊,这个题目应该会写才对,这个和之前的 ...

  8. poj 3321:Apple Tree(树状数组,提高题)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18623   Accepted: 5629 Descr ...

  9. POJ 2299 Ultra-QuickSort 逆序数 树状数组 归并排序 线段树

    题目链接:http://poj.org/problem?id=2299 求逆序数的经典题,求逆序数可用树状数组,归并排序,线段树求解,本文给出树状数组,归并排序,线段树的解法. 归并排序: #incl ...

  10. HDU 2838 (DP+树状数组维护带权排序)

    Reference: http://blog.csdn.net/me4546/article/details/6333225 题目链接: http://acm.hdu.edu.cn/showprobl ...

随机推荐

  1. NETSpider 网络蜘蛛采集工具

    NETSpider网站数据采集软件是一款基于.Net平台的开源软件.软件部分功能是基本Soukey软件进行开发的.这个版本采用VS2010+.NET3.5进行开发的.NETSpider采摘当前提供的主 ...

  2. RequireJS -Javascript模块化(一、简介)

    1.认识RequireJS RequireJs官网(http://requirejs.org/)的描述: RequireJS is a JavaScript file and module loade ...

  3. python3 pip使用报错

     在windodws上pip3使用了很长时间,今天突然报错. Fatal error in launcher: Unable to create process using '"' 解决方案 ...

  4. AVplayer搭建ftp共享PC端

    1.安装FTP服务 2.关闭防火墙 3.添加FTP站点 设置ip时,需要查询本机的ip 本机测试 4.iphone安装AVPlayer,并设置

  5. GBDT,FM,FFM推导

    GBDT推导: https://xgboost.readthedocs.io/en/latest/tutorials/model.html FM,FFM推导: https://tech.meituan ...

  6. Murano Weekly Meeting 2016.07.19

    Meeting time: 2016.July.19 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  7. Horizon

    python manage.py compress python manage.py collectstatic {% extends "horizon/common/_modal_form ...

  8. (转)总结Linux的chattr与lsattr命令详解

    PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了.chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的li ...

  9. stm32 输入捕获学习(二)

    (本文参考STM32  开发指南 V1.3   -- ALIENTEK 战舰 STM32 开发板库函数教程 ) 1. 实验设计 我们用 TIM5 的通道 1(PA0)来做输入捕获,捕获 PA0 上高电 ...

  10. web页面实时刷新之browser sync

    web开发对实时刷新的需求 在刚开始学习前端时每次修改文件内容后都需要手工刷新下浏览器来看效果,做的次数多了就特别难受,有时仅仅修改了一个字母都需要刷新下页面查看 之后接触到编写边看的集成IDE,文件 ...