hdu1541 Stars 树状数组

来源:互联网 发布:男 休闲鞋类推荐 知乎 编辑:程序博客网 时间:2024/05/17 02:26
/************************* * Author:fisty * Data:2014-12-8 * 树状数组求正序数 * **********************/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX_N 330020typedef long long ll;int bit[MAX_N];int sum(int i){        //sum求和        int sum = 0;        while(i > 0){                sum += bit[i];                i -= i&-i;        }        return sum;}void add(int i,int x){        //在i位加x        while(i <= MAX_N){                bit[i] += x;                i += i&-i;        }}struct node{        int x,y;}a[MAX_N];void solve(int n){        int ans[MAX_N];        memset(ans, 0, sizeof(ans));        //树状数组求正序数        for(int i = 0;i < n; i++){                ans[sum(a[i].x)]++;   //求每层的个数                add(a[i].x, 1);               }        for(int i = 0;i < n; i++){                printf("%d\n", ans[i]);        }}       int main(){        int n;        while(scanf("%d", &n) != EOF){                memset(bit, 0, sizeof(bit));                for(int i = 0;i < n; i++){                        scanf("%d%d",&a[i].x, &a[i].y);                        a[i].x++;   //在树状数组里不可以有0下标,故把坐标全部加1                }                solve(n);        }        return 0;}

0 0