24h購物| | PChome| 登入
2011-04-07 14:01:31| 人氣1,101| 回應0 | 上一篇 | 下一篇

Binary Indexed Tree (BIT)

推薦 0 收藏 0 轉貼0 訂閱站台

/**********************************************************************************/
/*  Problem: d788 "排名順序" from ST | BIT | AVL                              */
/*  Language: C                                                                   */
/*  Result: AC (256ms, 586KB) on ZeroJudge                                        */
/*  Author: morris1028 at 2011-04-07 13:45:04                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
int C[131073];/*2^17=131072*/
int Lowbit(int N) {
    return N&(-N);
}
int Modify (int N, int L) {
    while(N<=L) {
        C[N]+=1;
        N+=Lowbit(N);
    }
}
int Operator (int N) {
    int Sum=0;
    while(N) {
        Sum+=C[N];
        N-=Lowbit(N);
    }
    return Sum;
}
int Input() {   
    char cha;   
    int x=0;
    while(cha=getchar())
        if(cha!=' ' && cha!='\n') break;   
    x=cha-48;   
    while(cha=getchar()) {
        if(cha==' ' || cha=='\n') break;   
        x=x*10+cha-48;   
    }
    return x;   
}
main() {
    int N, M, a, B2[20]={1}, L;
    for(a=1;a<20;a++)
        B2[a]=B2[a-1]*2;
    while(scanf("%d",&N)==1) {
            for(a=0;a<20;a++)
                if(B2[a]>=N) break;
            L=B2[a];
            for(a=1;a<=L;a++)   C[a]=0;
            
            for(a=1;a<=N;a++) {
                M=Input();
                Modify (M, L);
                printf("%d\n",a-Operator(M-1));
            }
    }
    return 0;
}
 

台長: Morris
人氣(1,101) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 各類演算法與示範題目 |
此分類下一篇:IDA* (Iterative deepening A*)
此分類上一篇:A* Algorithm (A-Star)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文