poj 2352Stars 題意&題解&代碼(C++)

來源:互聯網
上載者:User

題目連結:
http://poj.org/problem?id=2352
題意:
在座標上有n個星星,如果某個星星座標為(x, y), 它的左下位置為:(x0,y0),x0<=x 且y0<=y。如果左下位置有a個星星,就表示這個星星屬於level x,
按照y遞增,如果y相同則x遞增的順序給出n個星星,求出所有level水平的數量。
題解:
因為y原本就是按遞增順序給出的,最後只要統計x座標上出現次數總和即次星星左下位置星星的總和。
代碼:

#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#define maxn (15005)using namespace std;int n,m,num[32005],vis[15005];int lowbit(int x){    return x&(-x);}void add(int x){    for (int i=x;i<=32001;i+=lowbit(i))    num[i]+=1;    return ;    }int query(int x){    int ans=0;    for (int i=x;i>0;i-=lowbit(i))    ans+=num[i];    return ans;}int main(){    scanf("%d",&n);    for (int i=1;i<=n;i++)    {        int x,y;        scanf("%d%d",&x,&y);        x++;                add(x);        vis[query(x)]++;    //  cout<<query(x)<<' '<<vis[query(x)]<<endl;    }    for (int i=1;i<=n;i++)    printf("%d\n",vis[i]);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.