/*
*
* Author: srkrishnan
*
* Created on July 28, 2011, 5:26 PM
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
void init(int *fw) {
int i = 0;
for (i = 0; i < MAX; i++) {
fw[i] = 0;
}
}
int getCumFrq(int *fw, int i) {
int cumfrq = 0;
while (i > 0) {
cumfrq += fw[i];
i = i - (i & -i);
}
return cumfrq;
}
void update(int *fw, int i) {
while (i < MAX) {
fw[i]++;
i = i + (i & -i);
}
}
void solve(int *a, int n, int *ans, int *fw) {
int i = 0;
for (i = n - 1; i >= 0; i--) {
ans[i] = getCumFrq(fw, a[i]);
update(fw,a[i]);
}
}
int main(int argc, char** argv) {
int a[] = {7, 5, 2, 5, 3, 4, 10, 2, 7, 1, 2, 3, 1, 6, 9};
int n = sizeof (a) / sizeof (a[0]);
int ans[n], fw[MAX], i = 0;
init(fw);
solve(a, n, ans, fw);
for (i = 0; i < n; i++) {
}
return (EXIT_SUCCESS);
}
LyogCiAqCiAqIEF1dGhvcjogc3JrcmlzaG5hbgogKgogKiBDcmVhdGVkIG9uIEp1bHkgMjgsIDIwMTEsIDU6MjYgUE0KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojZGVmaW5lIE1BWCAxMDI0Cgp2b2lkIGluaXQoaW50ICpmdykgewogICAgaW50IGkgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IE1BWDsgaSsrKSB7CiAgICAgICAgZndbaV0gPSAwOwogICAgfQp9CgppbnQgZ2V0Q3VtRnJxKGludCAqZncsIGludCBpKSB7CiAgICBpbnQgY3VtZnJxID0gMDsKICAgIHdoaWxlIChpID4gMCkgewogICAgICAgIGN1bWZycSArPSBmd1tpXTsKICAgICAgICBpID0gaSAtIChpICYgLWkpOwogICAgfQogICAgcmV0dXJuIGN1bWZycTsKfQoKdm9pZCB1cGRhdGUoaW50ICpmdywgaW50IGkpIHsKICAgIHdoaWxlIChpIDwgTUFYKSB7CiAgICAgICAgZndbaV0rKzsKICAgICAgICBpID0gaSArIChpICYgLWkpOwogICAgfQp9Cgp2b2lkIHNvbHZlKGludCAqYSwgaW50IG4sIGludCAqYW5zLCBpbnQgKmZ3KSB7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBhbnNbaV0gPSBnZXRDdW1GcnEoZncsIGFbaV0pOwogICAgICAgIHVwZGF0ZShmdyxhW2ldKTsKICAgIH0KfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CgogICAgaW50IGFbXSA9IHs3LCA1LCAyLCA1LCAzLCA0LCAxMCwgMiwgNywgMSwgMiwgMywgMSwgNiwgOX07CiAgICBpbnQgbiA9IHNpemVvZiAoYSkgLyBzaXplb2YgKGFbMF0pOwogICAgaW50IGFuc1tuXSwgZndbTUFYXSwgaSA9IDA7CgogICAgaW5pdChmdyk7CiAgICBzb2x2ZShhLCBuLCBhbnMsIGZ3KTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIgJWQgIiwgYW5zW2ldKTsKICAgIH0KCiAgICByZXR1cm4gKEVYSVRfU1VDQ0VTUyk7Cn0K