poj 2201
来源:互联网 发布:为什么都骂马蓉 知乎 编辑:程序博客网 时间:2024/04/30 00:41
构建笛卡尔树.
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 55000;int fa[maxn],lc[maxn],rc[maxn];struct node{ int num,key,val,f,l,r;} dt[maxn];bool Cmp(node a, node b){ return a.key < b.key;}void Insert(int i){ int j = i - 1; while(dt[j].val > dt[i].val) j = dt[j].f; dt[i].l = dt[j].r; dt[dt[j].r].f = i; dt[i].f = j; dt[j].r = i;}void Dfs(int i){ if(i) { Dfs(dt[i].l); fa[dt[i].num] = dt[dt[i].f].num; lc[dt[i].num] = dt[dt[i].l].num; rc[dt[i].num] = dt[dt[i].r].num; Dfs(dt[i].r); }}int main(){ int n; scanf("%d",&n); for(int i = 1; i <= n; ++i) { dt[i].num = i; scanf("%d %d",&dt[i].key,&dt[i].val); dt[i].f = dt[i].l = dt[i].r = 0; } dt[0].f = dt[0].l = dt[0].r =dt[0].key = dt[0].num = 0; dt[0].val = -999999; sort(dt+1,dt+n+1,Cmp); //for(int i =1; i <= n; ++i) //printf("%d %d\n",dt[i].key,dt[i].val); for(int i = 1; i<= n; ++i) Insert(i); Dfs(dt[0].r); printf("YES\n"); for(int i = 1; i <=n; ++i) printf("%d %d %d\n",fa[i],lc[i],rc[i]); return 0;}
- POJ 2201
- poj 2201
- poj 2201 笛卡尔树
- poj 2201 构造
- poj 2201 笛卡尔树
- poj 2201 笛卡尔树
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- YUV
- 在网页的title前面加上logo
- uva 705
- 做一个优秀的基层
- Android调用jni时出现java.lang.UnsatisfiedLinkError
- poj 2201
- Redis实战
- 直角连接线
- android 内置apk
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLInputElementClass
- poj3667(线段树,区间合并)
- 背包
- 什么导致Windows XP稳占中国市场【绿色】
- virtualenv