題意:給n個節點的s和e,求對於每個節點,其他節點和它的關係滿足si <= sj and ej <= ei and ei - si > ej - sj 的個數
題解:由於e的關係遞減,s的關係遞增,因此可以先對e排序,然後利用樹狀陣列更新並查詢每個sj在其之前的si的個數就是問題的解
#include #include #include #include using namespace std ;
#define max 100005
int t[max] ;
int ans[max] ;
int len ;
int lowbit(int x)
int query(int x)
return ret ;
}void update(int x , int d)
}struct node
cow[max];
bool comp(const struct node &x , const struct node &y)
int main()
sort(cow + 1, cow + 1 + len ,comp) ;
memset(t , 0 , sizeof(t)) ;
for(int i = 1 ; i <= len ; i ++)
else
ans[cow[i].number] = query(cow[i].s) ;
update(cow[i].s , 1) ;
} for(int i = 1 ; i <= len ; i ++)
printf("\n");
} return 0 ;
}
poj 2481(樹狀陣列)
這題樹狀陣列明顯可解,不解釋,但是注意有相同的奶牛的處理 include include include include define n 100005 using namespace std int c n tem struct dian d n int cmp dian a,dian b int...
poj 2481 樹狀陣列
解法2 按si值做降序排序後,相當於求每個位置i左邊大於等於e i 的個數 樹狀陣列更新節點的路徑和求和的路徑要改變,getsum i 相當於求i i 1 maxn include include using namespace std const int maxn 100010 int sum m...
poj2481樹狀陣列
每個牛有乙個區間 s,e 兩個牛 s1,e1 s2,e2 當s1 s2並且e1 e2並且e1 s1 e2 s2時,我們說牛1比牛2強,給n個牛的區間,對於每個牛,輸出比這個牛強的牛的個數。還是需要預處理,先對每個牛的e進行降序排序,e相同時對s進行公升序排列,這樣迴圈時可以保證後邊的牛絕對不比前邊的...