POJ2352 Interval Tree, Segment Tree, 线段树, 区间树

来源:互联网 发布:大魔王ba淘宝买靠谱吗 编辑:程序博客网 时间:2024/05/16 19:56
#include <iostream>#include <string>using namespace std;const int MAXN = 72010;struct node{int l;int r;int count;}nodes[MAXN];void build(int l, int r, int step){nodes[step].l = l;nodes[step].r = r;int mid;if((r - l) > 1){mid = (r + l) / 2;build(l, mid, step * 2);build(mid, r, step * 2 + 1);}};void insert(int l, int r, int step){nodes[step].count++;int l0 = nodes[step].l;int r0 = nodes[step].r;if(l0 == l && r0 == r)return;int mid = (l0 + r0) / 2;if(mid <= l)insert(l, r, step * 2 + 1);else if(mid >= r)insert(l, r, step * 2);elseinsert(mid, r, step * 2 + 1);};int query(int l, int r, int step){int l0 = nodes[step].l;int r0 = nodes[step].r;if(l == l0 && r == r0)return nodes[step].count;int mid = (l0 + r0) / 2;if(mid <= l)return query(l, r, step * 2 + 1);else if(mid >= r)return query(l, r, step * 2);elsereturn query(l, mid, step * 2) + query(mid, r, step * 2 + 1);};int ans[15004];int main(){int cnt;int x, y;cin >> cnt;for(int i = 0; i < cnt; i++){ans[i] = 0;}build(0, 32000, 1);int t_cnt = cnt;while(t_cnt--){cin >> x >> y;ans[query(0, x, 1)]++;insert(0, x, 1);}for(int i = 0; i < cnt; i++)cout << ans[i] << endl;return 0;}


原创粉丝点击