Mayor's posters 【POJ - 2528】【线段树+离散化】
2019-07-26 13:52
134 查看
题目链接
这道题主要处理的就是一个离散化加上区间查询的问题,因为这里空出来的点是比较的多的,所以我们可以离散化所有的点来维护这样的关系。
[code]#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <limits> #include <vector> #include <stack> #include <queue> #include <set> #include <map> #define lowbit(x) ( x&(-x) ) #define pi 3.141592653589793 #define e 2.718281828459045 using namespace std; typedef unsigned long long ull; typedef long long ll; const int maxN = 10005; int N, bit[maxN<<1], cnt, diff, tree[maxN<<3]; bool cmp_bit(int e1, int e2) { return e1<e2; } bool vis[maxN<<1]; int ans; struct node { int l, r, id; node(int a=0, int b=0, int c=0):l(a), r(b), id(c) {} }a[maxN]; void init() { cnt=0; ans=0; memset(vis, false, sizeof(vis)); } void buildTree(int rt, int l, int r) { tree[rt] = 0; if(l == r) return; int mid = (l + r)>>1; buildTree(rt<<1, l, mid); buildTree(rt<<1|1, mid+1, r); } void pushdown(int rt) { if(tree[rt]) { tree[rt<<1] = tree[rt<<1|1] = tree[rt]; tree[rt] = 0; } } void update(int rt, int l, int r, int ql, int qr, int val) { if(ql<=l && qr>=r) { tree[rt] = val; return; } pushdown(rt); int mid = (l + r)>>1; if(ql<=mid) update(rt<<1, l, mid, ql, qr, val); if(qr>mid) update(rt<<1|1, mid+1, r, ql, qr, val); } void query(int rt, int l, int r, int ql, int qr) { if(tree[rt]) { if(!vis[tree[rt]]) ans++; vis[tree[rt]] = true; return; } if(l == r) { if(!vis[tree[rt]] && tree[rt]) ans++; vis[tree[rt]] = true; return; } int mid = (l + r)>>1; query(rt<<1, l, mid, ql, mid); query(rt<<1|1, mid+1, r, mid+1, qr); } int main() { int T; scanf("%d", &T); while(T--) { scanf("%d", &N); init(); for(int i=1; i<=N; i++) { scanf("%d%d", &a[i].l, &a[i].r); a[i].id = i; bit[++cnt] = a[i].l; bit[++cnt] = a[i].r; } sort(bit+1, bit+1+cnt, cmp_bit); diff = (int)(unique(bit+1, bit+cnt+1) - bit - 1); buildTree(1, 1, diff); for(int i=1; i<=N; i++) { update(1, 1, diff, (int)(lower_bound(bit+1, bit+1+diff, a[i].l) - bit), (int)(lower_bound(bit+1, bit+1+diff, a[i].r) - bit), i); } query(1, 1, diff, 1, diff); printf("%d\n", ans); } return 0; }
相关文章推荐
- POJ 2528 Mayor's posters (线段树+离散化)
- POJ 2528 Mayor's posters (线段树+离散化)
- PKU 2528 POJ 2528 Mayor's posters ( 线段树+离散化 ) ACM 2528 IN PKU
- POJ 2528 Mayor's posters( 线段树+离散化)
- POJ - 2528 - Mayor's posters 【线段树+离散化+补点】
- POJ 2528 Mayor's posters (线段树+离散化)
- poj 2528 Mayor's posters 线段树+离散化 区间更新
- POJ 2528 Mayor's posters 线段树+离散化技巧
- POJ 2528 Mayor’s posters (线段树+离散化处理) 彻底搞懂延迟标记
- D - Mayor's posters (线段树+离散化处理) POJ 2528
- POJ - 2528 Mayor's posters (线段树+离散化)
- POJ 2528 Mayor's posters (离散化 + 线段树)
- poj 2528 Mayor's posters(线段树+离散化)
- POJ 2528 Mayor's posters(线段树 + 离散化--静态实现)
- POJ - 2528 Mayor's posters(线段树+离散化)
- POJ 2528 Mayor's posters(线段树+离散化)
- POJ 2528 Mayor's posters(离散化+线段树)
- POJ 2528 Mayor's posters(离散化+线段树)
- poj 2528 Mayor's posters(线段树+离散化)
- 【POJ】 2528 - Mayor's posters 【线段树+离散化】