樹狀數組–Pascal 山脈

來源:互聯網
上載者:User

描述
小卡卡順著老者所指的方向,來到了Pascal神峰的頂峰。老者告訴小卡卡,Pascal山脈有很多座山,都排在一條直線上,每座山都有不同的高度。
Pascal山的山頂有一個神奇的洞穴,進入這個洞穴後,你將會到達這座山前方的另一座山,更加神奇的是,你到達的山一定比他所在的山高度要小。而Pascal聖地最大的寶藏就藏在某一座Pascal山上的洞穴中,這個洞穴的特點是它有一道石門封閉著。
小卡卡很想知道進入每座山的洞穴後,他所到達的不同的山會有多少種可能。

輸入
該題含有多組測試資料。
第一行一個整數n,表示山的個數.(1<=n<=200000)
第二行以後n行從前到後給出每座山的高度。另外兩座山可以有相同的高度.(1<=每座山的高度<=maxlongint)

輸出
共n行,每行一個整數.第I行的整數表示他進入第I號山的洞穴後能夠到達的不同的山的個數.

範例輸入
5
1
2
3
4
5

範例輸出
0
1
2
3
4

 

【參考程式】:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
    int x,y;
} a[200001];
int b[200001],c[200001];
int n,len;
int cmp(const void *s,const void *t)
{
    node i=*(node *)s,j=*(node *)t;
    return i.x-j.x;
}
int lowbit(int x)
{
    return x^(x&(x-1));
}
void modify(int x)
{
    while (x<=len)
    {
        c[x]++;
        x+=lowbit(x);
    }
}
int getsum(int x)
{
    int s=0;
    while (x)
    {
        s+=c[x];
        x-=lowbit(x);
    }
    return s;
}
int main()
{
    //freopen("a1.in","r",stdin);
    //freopen("a1.out","w",stdout);
    while (scanf("%d",&n)!=EOF)
    {
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&a[i].x);
            a[i].y=i;
        }
        qsort(a+1,n,sizeof(node),cmp);
        a[0].x=-1;
        len=0;
        for (int i=1;i<=n;i++)
        {
            if (a[i].x!=a[i-1].x) len++;
            b[a[i].y]=len;
        }
        memset(c,0,sizeof(c));
        for (int i=1;i<=n;i++)
        {
            int sum=getsum(b[i]-1);
            printf("%d/n",sum);
            modify(b[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.