POJ 2352 Stars
2016-10-16 14:11
232 查看
poj 2352 Stars
题目大意:
第一个数n,后面有n行,每行两个数表示星星的横坐标和纵坐标(输入已经按纵坐标排序,纵坐标相同按横坐标排序),若一颗星星的左或下或左下有一颗星星,那这颗星星的等级就+1(一开始为0级)。
输出n行,每行一个整数,表示等级为n-1的星星有几颗。
Sample Input
5
1 1
5 1
7 1
3 3
5 5
Sample Output
1 //等级为0的有1个
2 //等级为1的有2个
1 //等级为2的有1个
1 //等级为3的有1个
0 //等级为4个没有
思路:
因为坐标有0,所以需要将坐标读进来的时候+1。
题解:
题目大意:
第一个数n,后面有n行,每行两个数表示星星的横坐标和纵坐标(输入已经按纵坐标排序,纵坐标相同按横坐标排序),若一颗星星的左或下或左下有一颗星星,那这颗星星的等级就+1(一开始为0级)。
输出n行,每行一个整数,表示等级为n-1的星星有几颗。
Sample Input
5
1 1
5 1
7 1
3 3
5 5
Sample Output
1 //等级为0的有1个
2 //等级为1的有2个
1 //等级为2的有1个
1 //等级为3的有1个
0 //等级为4个没有
思路:
因为坐标有0,所以需要将坐标读进来的时候+1。
题解:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n; int a[320000],t[15000]; int lowbit(int x) { return x&-x; } int sum(int x) { int k=0; while(x>=1) { k+=a[x]; x-=lowbit(x); } return k; } void update(int x) { while(x<=320000) { a[x]++; x+=lowbit(x); } } int main() { while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); memset(t,0,sizeof(t)); for(int i=1;i<=n;i++) { int x,y; scanf("%d%d",&x,&y); t[sum(x+1)]++; update(x+1); } for(int i=0;i<n;i++) { printf("%d\n",t[i]); } } return 0; }
相关文章推荐
- POJ2352 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
- POJ 2352 Stars 【树状数组】
- POJ 2352 Stars
- POJ2352 Stars
- POJ 2352_Stars && POJ-2481 Cows (线段树单点更新+树状数组)
- POJ 2352 Stars (树状数组)
- 【poj 2352】 Stars 【Ural Collegiate Programming Contest 1999】
- POJ 2352 Stars
- POJ 2352 Stars(树状数组)
- hdu1541&poj2352 Stars
- poj 2352 Stars(树状数组)