POJ 2528 Mayor's posters
2016-05-17 15:34
323 查看
题目分析
贴海报就看成染色,后面染上的颜色会覆盖之前的颜色。于是就转化成了线段树区间更新,大家可以看到题目给出的范围为10000000,但是只有10000个点,所以需要进行离散化即可,离散化最初用的map,直接tle了,于是看别人的博客改成二分查找了。#include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 10005; #define mid (L+R)/2 #define lson o<<1, L, mid #define rson o<<1|1, mid+1, R vector <int> vec; struct Node { int left,right; }node[maxn]; int color[maxn<<3]; int vis[maxn<<1]; void pushdown(int o) { if(color[o]) { color[o<<1] = color[o]; color[o<<1|1] = color[o]; color[o] = 0; } } void update(int o,int L,int R,int l,int r,int cnt) //更新 { if(l <= L && R <= r) { color[o] = cnt; return ; } pushdown(o); if(l <= mid) update(lson,l,r,cnt); if(r > mid) update(rson,l,r,cnt); } int query(int o,int L,int R) { if(L == R) //这一段有颜色 { if(vis[color[o]]) return 0; else //如果没有出现过这种颜色,也就是出现了新的板报 { vis[color[o]] = 1; return 1; } } pushdown(o); int ret = 0; ret += query(lson); ret += query(rson); return ret; } int main() { int T; scanf("%d", &T); while(T--) { int n; scanf("%d", &n); vec.clear(); for(int i = 0; i < n; i++) { scanf("%d%d", &node[i].left, &node[i].right); vec.push_back(node[i].left); vec.push_back(node[i].right); } sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(),vec.end()), vec.end()); //删除重复值 int len = vec.size(); memset(color, 0, sizeof(color)); for(int i = 0; i < n; i++) { int l = lower_bound(vec.begin(),vec.end(),node[i].left) - vec.begin() + 1; int r = lower_bound(vec.begin(),vec.end(),node[i].right) - vec.begin() + 1; update(1, 1, len, l, r, i+1); } memset(vis, 0 ,sizeof(vis)); printf("%d\n", query(1,1,len)); } return 0; }
相关文章推荐
- Java RandomAccessFile使用
- 【dotnet跨平台】微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1,还有Entity Framework Core RC2
- C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性
- php 禁用eval( )函数
- JS给元素循环添加事件的问题
- HDU - 4507 吉哥系列故事——恨7不成妻 (数位DP&记忆化dfs)好题
- 九度题目1003:A+B
- centos7 & mysql
- js替换字符串中特殊字符
- keyframes 放大缩小动画
- 通知
- http://blog.csdn.net/xiahouzuoxin/article/details/10163109
- [leetcode] 327. Count of Range Sum 解题报告
- java 面向对象练习题4
- js 操作 cookie
- Oracle的model语句入门-转
- ios 生成证书
- Android编译中m、mm、mmm的区别
- tomcat中配置使用JNDI
- 怎么在service中启动activity