poj 2352 (treap 树堆做法,size的应用)
2017-04-18 16:10
351 查看
#include <cstdio> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <cstdlib> #include <cmath> #include <utility> #include <vector> #include <queue> #include <map> #include <set> #define max(x,y) ((x)>(y)?(x):(y)) #define min(x,y) ((x)>(y)?(y):(x)) #define INF 0x3f3f3f3f #define MAXN 30005 using namespace std; int cnt=1,rt=0; int n,m,a[MAXN],u[MAXN]; struct Tree { int key,size,pri,son[2]; void set(int x,int y,int z) { key=x; pri=y; size=z; son[0]=son[1]=0; } }T[MAXN]; struct node { int x,y; }s[101010]; int cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } void rotate(int p,int &x) { int y=T[x].son[!p]; T[x].size=T[x].size-T[y].size+T[T[y].son[p]].size; T[x].son[!p]=T[y].son[p]; T[y].size=T[y].size-T[T[y].son[p]].size+T[x].size; T[y].son[p]=x; x=y; } void ins(int key,int &x) { if(x==0) { T[x=cnt++].set(key,rand(),1); } else { T[x].size++; int p=key<T[x].key; ins(key,T[x].son[!p]); if(T[x].pri<T[T[x].son[!p]].pri) rotate(p,x); } } int find(int key, int &x) { if(x == 0) return 0; 4000 if(T[x].key <= key) return T[T[x].son[0]].size+1+find(key, T[x].son[1]); else return find(key, T[x].son[0]); } int ans[101010]; int main() { scanf("%d",&n); for(int i=0;i<n;i++) { int a,b; scanf("%d%d",&a,&b); a++,b++; s[i].x=a,s[i].y=b; } sort(s,s+n,cmp); for(int i=0;i<n;i++) { ans[find(s[i].y,rt)]++; ins(s[i].y,rt); } for(int i=0;i<n;i++) printf("%d\n",ans[i] ); }
相关文章推荐
- poj_2352 Treap
- poj 2352 树状数组 基本应用
- POJ 2352 treap
- poj 2352 star 树状数组的变型应用
- poj 2352 树状数组 OR Treap
- POJ 2352 Stars(treap)
- poj 2352 treap
- POJ2352——树状数组的应用
- (简单) POJ 2352 Stars,Treap。
- POJ2352 Stars 树状数组简单应用
- poj 2352 treap
- poj 2352 Stars (线段树做法)
- POJ 2352 Stars Treap & 线段树
- POJ 2352 Stars(treap练习)
- POJ 2352 Star Treap||树状数组
- poj2481-树状数组的应用
- POJ 2352 stars
- POJ2352_Stars_线段树求前缀和
- poj-1423 NYOJ_69 数字长度 斯特林公式 对数应用
- poj2352 Star