poj2481 树状数组

简介:

排序后类似stars, 用树状数组。

注意两个数组都要memset和去重



#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct data{
    int s, e, i;
    friend bool operator <(data a, data b){
        if (a.e != b.e) return a.e > b.e;
        else return a.s<b.s;
    }
} a[100010];
int t[100010];
int lowbit(int x){
    return x & -x;
}
void build(int x){
    while (x <= 100001){
        t[x] ++;
        x += lowbit(x);
    }
}
int sum(int x){
    int res = 0;
    while (x){
        res += t[x];
        x -= lowbit(x);
    }
    return res;
}
int ans[100010];
int main(){
    int n;
    while (scanf("%d", &n) && n){
        memset(ans, 0, sizeof(ans));
        memset(t, 0, sizeof(t));
        for (int i = 0; i < n; i++) {scanf("%d%d", &a[i].s, &a[i].e);
        a[i].s++; a[i].e++; a[i].i = i;}
        sort(a, a + n);
        build(a[0].s);
        for (int i = 1; i < n; i++){
            if (a[i].s == a[i-1].s && a[i].e == a[i-1].e) {
                ans[a[i].i] = ans[a[i-1].i];
                build(a[i].s);
                continue;
            }
            ans[a[i].i] = sum(a[i].s);
            //cout<<a[i].i<<"    "<<a[i].s<<' '<<a[i].e<<' '<<ans[a[i].i]<<endl;
            build (a[i].s);
        }
        for (int i = 0; i < n-1; i++) printf("%d ", ans[i]); printf("%d", ans[n-1]);
        printf("\n");
    }
    return 0;
}


相关文章
|
8月前
POJ-2245-Lotto
POJ-2245-Lotto
42 0
|
8月前
|
算法 数据建模
Poj 3169(差分约束系统)
Poj 3169(差分约束系统)
38 0
poj 2299 求逆序数
http://poj.org/problem?id=2299 #include using namespace std; int aa[500010],bb[500010]; long long s=0; void merge(int l,int m,int r) { ...
809 0
|
人工智能
POJ 2531
初学dfs参考别人代码,如有雷同,见怪不怪。#include using namespace std; int aa[25][25]; int maxa=0; int step[25]={0},n; void dfs(int a,int b) { int t=b; step...
719 0
|
算法 数据建模 机器学习/深度学习
|
人工智能 BI
poj-3185-开关问题
描述   牛一行20他们喝的水碗。碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水)。他们希望所有20个水碗那么,因此用宽鼻子翻碗。   嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两端的情况下碗——两碗)。
819 0
POJ-1003-hangover
Description How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length.
771 0
poj-1008-玛雅历
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开始的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。
890 0