POJ 2352 樹狀數組

來源:互聯網
上載者:User
//這道題目剛開始根本就沒有想到用樹狀數組來做//我們知道樹狀數組提高了求和和修改的效率S[n]=A[1]+A[2]+...+A[n],而根據這個題目的題意,//y座標是遞增的,我們只需要考慮x座標,即求給點x座標之前<=x的元素個數,關鍵是我們如何 //確定A數組,A數組表示什麼意思,這裡A數組的意思是:A[i]表示i元素出現的次數,對於給定範例就是//A[1]=1,A[3]=1,A[5]=2,A[7]=1(這是統計到最後的結果) #include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 32005int n,i,x,y;int c[32005];int level[32005];int lowbit(int x){    return x&(-x);}int sum(int n){    int sum=0;    while(n>0){        sum+=c[n];        n=n-lowbit(n);    }    return sum;}//修改n元素 void update(int n){    while(n<MAXN){        c[n]++;        n=n+lowbit(n);    }}int main(){    while(scanf("%d",&n)!=EOF){        memset(level,0,sizeof(level));        memset(c,0,sizeof(c));        for(i=0;i<n;i++){            scanf("%d%d",&x,&y);            ++x;//關鍵,數組數組從1開始             level[sum(x)]++;            update(x);        }        for(i=0;i<n;i++)            printf("%d\n",level[i]);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.