题意:

给出n个星星的坐标 x,y ,当存在其他星星的坐标x1,y1满足x>=x1&&y>=y1时 这个星星的等级就加1。

注意:

题中给的数据是有规律的 ,y是逐渐增加的 ,若y相等时x是逐渐增加的 。

思路:

~~怎么都没想到是线段树 ~~

因为当前给的坐标的yn 一定大于等于之前的y,那么只需要看之前有多少个小于xn 的坐标即可 (说白了就不用考虑y),这一步用线段树来实现:

对于每个xi 查询1到xi 的横坐标有多少个,那么怎么对x进行计数呢?对与每个xi 更新区间x->max(就是32000)进行加1操作 ,那么对于后面大于xi 的横坐标只需要单点查询它的xn 坐标 被加了多少次即可 ,即代码中的sum[o],就是i号星星的等级

上代码:

//A code block
#include<iostream>
#include<stdio.h>
using namespace std;
int n,m,lazy[150005],sum[150005];/*区间最大值 不断加1*/
void pushdown(int l,int r,int o)
{
if(lazy[o])
{
lazy[o<<1|1]+=lazy[o];
lazy[o<<1]+=lazy[o];
sum[o<<1|1]+=lazy[o];
sum[o<<1]+=lazy[o];
lazy[o]=0;
}
}
void update(int x,int y,int l,int r,int o)
{
if(x<=l&&y>=r)
{
sum[o]++;
lazy[o]++;
return ;
}
pushdown(l,r,o);
int mid=(l+r)>>1;
if(x<=mid) update(x,y,l,mid,o<<1);
if(y>mid) update(x,y,mid+1,r,o<<1|1);
sum[o]=max(sum[o<<1],sum[o<<1|1]);
return ;
}
int k=0;
void query(int x,int y,int l,int r,int o)
{
if(x<=l&&y>=r)
{
k=max(sum[o],k);
return ;
}
pushdown(l,r,o);
int mid=(l+r)>>1;
if(x<=mid) query(x,y,l,mid,o<<1);
if(y>mid) query(x,y,mid+1,r,o<<1|1);
return ;
}
int main()
{
while(~scanf("%d",&m))
{
int x,y,grade[15010],maxx=32005;
for(int i=0;i<=15000;i++)
grade[i]=0;
for(int i=0;i<=150000;i++)
lazy[i]=sum[i]=0;
for(int i=1;i<=m;i++)
{
k=0;
scanf("%d%d",&x,&y);
x++,y++;
query(1,x,1,maxx,1);
grade[k]++;
update(x,maxx,1,maxx,1);
}
for(int i=0;i<m;i++)
printf("%d\n",grade[i]);
}
return 0;
}
var foo = 'bar';

(线段树 -星星等级)Stars POJ - 2352的更多相关文章

  1. 线段树 + 区间更新 + 模板 ---- poj 3468

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 59798   ...

  2. 线段树(成段更新) POJ 3468 A Simple Problem with Integers

    题目传送门 /* 线段树-成段更新:裸题,成段增减,区间求和 注意:开long long:) */ #include <cstdio> #include <iostream> ...

  3. 【树状数组】 poj 2352

    题意:给出n个平面二维坐标,对于每个坐标,如果这个坐标跟(0,0)形成的矩形内包含的点数为 k (包含边界,但不包含坐标本身),那么这个坐标就是 level k.输出level 0 - n-1的点数分 ...

  4. 线段树扫描线总结(POJ 1389)

    扫描线算是线段树的一个比较特殊的用法,虽然NOIP不一定会考,但是学学还是有用的,况且也不是很难理解. 以前学过一点,不是很透,今天算是搞懂了. 就以这道题为例吧:嘟嘟嘟 题目的意思是在一个二维坐标系 ...

  5. 【树状数组】POJ 2352 Stars

    /** * @author johnsondu * @time 2015-8-22 * @type Binary Index Tree * ignore the coordinate of y and ...

  6. Stars POJ - 2352

    Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

  7. (线段树)Balanced Lineup --POJ --3264

    链接: 对于POJ老是爆,我也是醉了, 链接等等再发吧! http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82832#problem/G 只 ...

  8. 线段树(倒序操作):POJ 2828 Buy Tickets

    Buy Tickets   Description Railway tickets were difficult to buy around the Lunar New Year in China, ...

  9. 求矩形的周长(线段树+扫描线) Picture POJ - 1177

    题目链接:https://cn.vjudge.net/problem/POJ-1177 题目大意:求矩形外部的周长 具体思路:借用一下bin巨的一张图片. 我们按照y周从下往上的扫描线进行扫描,第一下 ...

随机推荐

  1. Neural Turing Machine - 神经图灵机

    Neural Turing Machine - 神经图灵机 论文原文地址: http://arxiv.org/pdf/1410.5401.pdf 一般的神经网络不具有记忆功能,输出的结果只基于当前的输 ...

  2. CentOS 7下Apache + PHP + MySQL环境(LAMP)的安装

    Step 1:更换阿里云 yum 源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7 ...

  3. 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解

    前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不 ...

  4. 从输入URL到页面展示

    当我们输入 URL 并按回车后,浏览器会对 URL 进行检查,首先判断URL格式,比如是ftp http ed2k等等,我们这里假设这个URL是http://hellocassie.cn,那么浏览器会 ...

  5. node中fs模块 - fs.open() fs.read() fs.write() fs.close()

    var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...

  6. 论JS函数传参时:值传递与引用传递的区别

    什么是值传递:值传递是指在调用函数时将实际参数(实参)复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 值传递的总结:也就是说,将实参复制到函数中的这个过程叫值传递 什么是 ...

  7. 判断括号是否有效(c++描述)

    开门见山,假设我们有一大串的由'{', '}', '[', ']', '(', ')' 这些括号构成比如像这样的"{[}][()"符号串,我们肉眼当然能看出它是非法的,那么如何使用 ...

  8. HTTP/1.1 与 HTTP/2.0

    HTTP/1.1 与 HTTP/2.0 HTTP/1.1 持久连接 非持久连接

  9. C++ for循环练习

    #include <stdio.h> //题目:现有公鸡5元一只,母鸡3元一只,小鸡1元3只(小鸡不能单买 最少3只起卖),此时顾客有100元,请问有多少种购买方案. int main() ...

  10. windows 下载~安装nginx

    nginx 中文文档 http://www.nginx.cn/doc/ 到nginx官网下载安装包http://nginx.org/en/download.html 解压安装包 进入windows的c ...