麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

【樹狀數組】Stars

2019-11-06 08:16:09
字體:
來源:轉載
供稿:網友

                                        C - Stars

 Astronomers often examine star maps where stars are rePResented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. Astronomers want to know the distribution of the levels of the stars. 
For example, look at the map shown on the figure above. Level of the star number 5 is equal to 3 (it's formed by three stars with a numbers 1, 2 and 4). And the levels of the stars numbered by 2 and 4 are 1. At this map there are only one star of the level 0, two stars of the level 1, one star of the level 2, and one star of the level 3. You are to write a program that will count the amounts of the stars of each level on a given map.InputThe first line of the input file contains a number of stars N (1<=N<=15000). The following N lines describe coordinates of stars (two integers X and Y per line separated by a space, 0<=X,Y<=32000). There can be only one star at one point of the plane. Stars are listed in ascending order of Y coordinate. Stars with equal Y coordinates are listed in ascending order of X coordinate. OutputThe output should contain N lines, one number per line. The first line contains amount of stars of the level 0, the second does amount of stars of the level 1 and so on, the last line contains amount of stars of the level N-1.Sample Input
51 15 17 13 35 5Sample Output
12110HintThis problem has huge input data,use scanf() instead of cin to read data to avoid time limit exceed.

#----------------------------------------------------------------------------------------------#題目大意:按y的升序(y相同則按x升序)給出n(1<=n<=15000)個星星的坐標(0<=x,y<=32000),每個星星左下方(包括同一行或同一列)的星星個數為它的“等級”,依次輸出等級為1,2,3,...,n-1的星星的個數。

最后提示用sanf,最好不用cin

#----------------------------------------------------------------------------------------------#

思路很容易:樹狀數組求x的“順序對”,因為y已經按升序(即從低到高)排好序,所以只需要知道有多少個星星的x坐標小于當前星星的x坐標就可以了。

怎么用樹狀數組求x的“順序對”呢,先解釋下順序對就是它之前的數當中比它小的數的個數。

然后,就容易了:將星星的x坐標的位置+1,當然是樹狀數組的+1,然后,x的getsum就是它的等級了。

why?

因為:x坐標+1,就表示了x那一排多了1個,而y坐標是遞增的,每個點只有一個星星,所以當前x的getsum就代表了當前x坐標比它小的星星數量。

原諒我只能這樣描述……自己體會吧。

代碼:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lowbit(x) x&-xint n;int tr[32005];//樹狀數組int ans[15005];//存每個等級星星數void update(int q,int x){	for(int i=q;i<=32001;i+=lowbit(i))//注意i<=32001,這里我調了2天,之前寫的是i<=32000,然而我x++了,所以……		tr[i]+=x;}int getsum(int q){	int ans=0;	for(int i=q;i>0;i-=lowbit(i))		ans+=tr[i];	return ans;}//模板int main(){	scanf("%d",&n);	for(int i=1;i<=n;i++)	{		int x,y;		scanf("%d%d",&x,&y);		x++;//為了防止x為0		update(x,1);		ans[getsum(x)-1]++;//前面x++了,后邊要減回來	}	for(int i=0;i<n;i++)		printf("%d/n",ans[i]);}                                                                                                                                            By WZY


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产视频精品在线 | 狠狠干91| 毛片大全在线观看 | 国产一区二区国产 | av视在线| 久草在线高清 | 免费国产视频大全入口 | 久久久久久久久久久亚洲 | 欧美精品一区二区三区久久久 | 精选久久| 黄色网址免费进入 | 快播av在线 | 免费一级毛片在线播放不收费 | 特黄一级小说 | 国产乱弄| 久久久久久久久久久久久久久伊免 | hd极品free性xxx一护士 | 久久2019中文字幕 | 日韩a毛片免费观看 | 成人毛片一区 | 久久资源总站 | 国内免费视频成人精品 | 成码无人av片在线观看网站 | 国产精选电影免费在线观看 | 欧美在线观看视频一区 | 国产一级淫片免费看 | 成年免费视频黄网站在线观看 | 在线看一区二区三区 | 欧美18一19sex性护士农村 | 黄色大片在线免费观看 | www.99热精品 | 污片视频网站 | 成人 日韩 | fc2成人免费人成在线观看播放 | 国产一级在线免费观看 | 韩国草草影院 | 精品中文字幕在线播放 | 欧美一级aa免费毛片 | 亚洲一区二区免费 | 特片网久久 | 欧美成人一级片 |