Poj 1436 线段树模板
来源:互联网 发布:phpstorm git mac 编辑:程序博客网 时间:2024/05/04 19:38
没啥好说的,线段树维护区间,n^3暴力跑一遍就行了。
居然不会T,8000个点不就炸了么,汗。
然后就是自己写了(照别人抄)一份板子,感觉宏定义lson和rson还挺方便的。
空间要开8倍。
延迟标记以前太菜一直不懂,现在看也就那么回事。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define lson u<<1#define rson u<<1|1const int MAXN=16100;bool vis[MAXN>>1][MAXN>>1];struct Dat{ int y1, y2, x; //Dat(int y1, int y2, int x):y1(y1), y2(y2), x(x){}}seg[MAXN>>1];bool operator<(const Dat& a, const Dat& b){ return a.x<b.x;}struct node{ int left, right, color;}T[MAXN<<2];void Build(int u, int l, int r){ T[u].left=l;T[u].right=r; T[u].color=0; if(l==r)return; int mid=(l+r)>>1; Build(lson, l, mid);Build(rson, mid+1, r);}void Pushdown(int u){ if(T[u].color!=-1){ T[lson].color=T[rson].color=T[u].color; T[u].color=-1; }}void update(int u, int l, int r, int val){ if(l<=T[u].left&&T[u].right<=r){T[u].color=val;return;} else { Pushdown(u); if(l<=T[lson].right)update(lson, l, r, val); if(r>=T[rson].left)update(rson, l, r, val); }}void Query(int u, int l, int r, int id){ if(T[u].color!=-1){ vis[T[u].color][id]=true;return; } if(T[u].left==T[u].right)return; Pushdown(u); if(l<=T[lson].right)Query(lson, l, r, id); if(r>=T[rson].left)Query(rson, l, r, id);}int main(){ int t, n; scanf("%d", &t); while(t--) { scanf("%d", &n); for(int i=1;i<=n;i++){ scanf("%d%d%d", &seg[i].y1, &seg[i].y2, &seg[i].x); seg[i].y1<<=1;seg[i].y2<<=1; } sort(seg+1, seg+n+1); memset(vis, false, sizeof(vis)); Build(1, 0, MAXN); for(int i=1;i<=n;i++){ Query(1, seg[i].y1, seg[i].y2, i); update(1, seg[i].y1, seg[i].y2, i); } int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(vis[i][j])for(int k=1;k<=n;k++){ if(vis[i][k]&&vis[j][k])ans++; } printf("%d\n", ans); }}
0 0
- Poj 1436 线段树模板
- poj 3468 线段树 lazy标记模板
- POJ 3468(线段树模板 Lazy)
- 线段树区间更新模板 POJ
- 线段树模板 (poj 3468)延迟标记
- poj 3264 Balanced Lineup(线段树模板)
- POJ 1151 线段树 扫描线 模板题
- POJ 1177 线段树 扫描线 模板题
- poj 3237 树链剖分模板(用到线段树lazy操作)
- POJ--3468(线段树,区间修改,模板)
- POJ 3468 线段树区间更新求和模板
- poj 3264 Balanced Lineup (线段树模板题)
- poj 3468 线段树区间更新(基础,模板)
- POJ 2155 Matrix 【二维线段树模板题】
- POJ 3667 Hotel 线段树lazy标记 (模板~~)
- poj 3468 线段树(区间更新)模板题
- POJ 3468(线段树区间修改模板题)
- poj 3264 Balanced Lineup (线段树模板题)
- 二叉树的构建与遍历
- MFC多线程中主线程阻塞了子线程
- 编译原理之--FIRST集、FOLLOW集 和 SELECT集
- JAVA字符串转日期或日期转字符串
- 9、Spring MVC 之 Resolving views
- Poj 1436 线段树模板
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
- HDU1253 胜利大逃亡 (3维 BFS)
- 装机记录
- linux内核设计与实现:系统调用
- ScrollView contentInset 和 contentOffset和frame 之间的含义
- PHP高级知识进阶
- 【bzoj1878】【洛谷P1972】【SDOI2009】HH的项链
- 街区最短路径问题