POJ 2352 Stars
2014-05-09 16:36
357 查看
POJ 2352 Stars
思路:这题就是数星星等级,每个星星的等级是在一个直角坐标系定义的~~咋一看似乎需要用的二维数组,但是x,y范围太大,办不到~·不过题目也说了,给的数据是按顺序给的~先y递增,然后x递增~~~基本上y是没用的,所以我下面加了个@SuppressWarnings("unused")(to y)
所以只要对x进行统计即可~要注意x等于0的情况要单独拿出来讨论。a[i]表示输入等级为 i 的星星的数量~~~由于y是按递增顺序给出的,所以某个星星的等级等于所有x坐标小于等于它的星星~~~
这样树状数组需要记录的数据就明白了~~就是记录x轴坐标upDate(x,1)就是星星x轴坐标大小为x的个数+1~每读入一个x坐标,更新一次~~相当于单点更新,区间查询~不过这个查询是实时的,每读入一个星星坐标,那个星星的等级就能确定了,否者会被后面加入的星星影响。
AC代码:
思路:这题就是数星星等级,每个星星的等级是在一个直角坐标系定义的~~咋一看似乎需要用的二维数组,但是x,y范围太大,办不到~·不过题目也说了,给的数据是按顺序给的~先y递增,然后x递增~~~基本上y是没用的,所以我下面加了个@SuppressWarnings("unused")(to y)
所以只要对x进行统计即可~要注意x等于0的情况要单独拿出来讨论。a[i]表示输入等级为 i 的星星的数量~~~由于y是按递增顺序给出的,所以某个星星的等级等于所有x坐标小于等于它的星星~~~
这样树状数组需要记录的数据就明白了~~就是记录x轴坐标upDate(x,1)就是星星x轴坐标大小为x的个数+1~每读入一个x坐标,更新一次~~相当于单点更新,区间查询~不过这个查询是实时的,每读入一个星星坐标,那个星星的等级就能确定了,否者会被后面加入的星星影响。
AC代码:
import java.util.Scanner; public class Main { static int maxn=32000; static int c[]=new int[maxn|1]; static Scanner scan=new Scanner(System.in); private static int lowbit(int x) {return x&(-x);} private static void upDate(int x) { for(int i=x;i<=maxn;i+=lowbit(i)) c[i]++; } private static int sum(int x) { int sum=0; for(int i=x;i>0;i-=lowbit(i)) sum+=c[i]; return sum; } public static void main(String[] args) { int n=scan.nextInt(); int a[]=new int ; for(int i=1,count=0;i<=n;i++) { int x=scan.nextInt(); @SuppressWarnings("unused") int y=scan.nextInt(); if(x==0) { c[0]++; a[count++]++; } else { a[sum(x)+count]++;//sum(x)是前面的所有星星,但是不包括x坐标为零的星星,x坐标为零的星星用count统计 upDate(x); } } for(int i:a) System.out.println(i); } }
相关文章推荐
- POJ 2352 Stars
- poj 2352 stars (树状数组)
- POJ 2352 Stars (线段树&&树状数组)
- 【原】 POJ 2352 Stars 树状数组 解题报告
- poj 2352 Stars(树状数组)
- poj 2352 Stars(树状数组)
- POJ 2352-Stars(树状数组-星系)
- 【poj 2352】Stars 题意&题解&代码(C++)
- POJ 2352 Stars
- POJ_2352_Stars
- poj 2352 OR hdu 1541 Stars(数据结构:树状数组)
- POJ - 2352 Stars解题报告(树状数组求二维区域和)
- POJ 2352 Stars 【树状数组】
- POJ 2352 Stars (树状数组)
- POJ 2352 stars
- POJ 2352 Stars 树状数组
- poj 2352 Stars 用线段树实现 (有点水)
- POJ 2352 Stars
- poj 2352 Stars
- POJ 2352 Stars(简单树状数组)