【dp+离散化+线段树优化】Paint
来源:互联网 发布:zbtc 数字图像 算法 编辑:程序博客网 时间:2024/05/17 22:35
题意: 求不相交的区间集合,没有覆盖到的范围最小
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 4e5+10;const int M = 26;const int INF = 0x3f3f3f3f;vector<LL> xs;inline int getid(LL x){return lower_bound(xs.begin(),xs.end(), x) - xs.begin() + 1;}struct asd{ LL l,r; LL sum;}a[N];bool cmp(asd x,asd y){ if(x.l != y.l) return x.l < y.l; return x.r < y.r;}struct Node{ int left,right; LL maxn;}node[N*4];int father[N*4];void BulitTree(int i,int l,int r){ node[i].left = l; node[i].right = r; node[i].maxn = 0; if(l == r){ father[l] = i; return ; } BulitTree(i*2,l,(l+r)/2); BulitTree(i*2+1,(l+r)/2+1,r);}void Update(int i){ if(i == 1) return ; int pi = i/2; LL x = node[pi*2].maxn; LL y = node[pi*2+1].maxn; node[pi].maxn = max(x,y); Update(pi);}LL ans;void Query(int i,int l,int r){ if(node[i].right==r && node[i].left==l){ ans = max(ans,node[i].maxn); return ; } i = i*2; if(l <= node[i].right){ if(r <= node[i].right){ Query(i,l,r); } else{ Query(i,l,node[i].right); } } i++; if(r >= node[i].left){ if(l >= node[i].left) Query(i,l,r); else Query(i,node[i].left,r); }}int main(){ LL n; int m; scanf("%lld%d",&n,&m); BulitTree(1,1,m*2+1); for(int i = 1; i <= m; i++){ scanf("%I64d%I64d",&a[i].l,&a[i].r); a[i].sum = a[i].r-a[i].l+1; } sort(a+1,a+m+1,cmp); xs.push_back(0); for(int i = 1; i <= m; i++) { xs.push_back(a[i].l); xs.push_back(a[i].r); } sort(xs.begin(), xs.end()); vector<LL>::iterator e; e=unique(xs.begin(),xs.end()); xs.erase(unique(xs.begin(), xs.end()) , xs.end()); int id = getid(0); int x = father[id]; node[x].maxn = 0; Update(x); for(int i = 1; i <= m; i++){ id = getid(a[i].l); ans = 0; Query(1,1,id-1); id = getid(a[i].r); x = father[id]; node[x].maxn = ans+a[i].sum; Update(x); } ans = 0; Query(1,1,m*2+1); printf("%I64d\n",n-ans); return 0;}
阅读全文
0 0
- 【dp+离散化+线段树优化】Paint
- UESTC 1501 - Defense Lines 离散化+线段树优化DP
- codeforces 271E 离散化+线段树,dp优化
- hdu 3450 离散化+dp+线段树优化
- HDU 3607 线段树+离散化+DP
- NOIP模拟题 [递推][优化][dp][线段树][离散]
- zoj 3349 Special Subsequence 【离散化二分 + 线段树优化dp】
- codeforces #343 div2 D. Babaei and Birthday Cake(DP+离散化+线段树优化)
- Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+离散化优化DP)
- hdu5009 离散化+dp+优化
- USETC 1501 Defence Linces(DP+线段树+离散化)
- HDOJ 题目2836 Traversal(线段树,离散化,DP)
- HDU 2836 Traversal(线段树+离散化+DP)
- 51Nod - 1781 dp + 线段树 + 离散化
- codeforces 777E dp+线段树+离散化
- HDU 3016 Man Down(线段树+离散化+dp)
- 线段树+离散化
- 离散化 + 线段树
- jquery 中 $.map 的使用方法
- bfs
- 从内容/用户画像到如何做算法研发
- 项目三:爬取视频磁力链接
- ubuntu搭建git服务器
- 【dp+离散化+线段树优化】Paint
- JSON.parse()和JSON.stringify()
- java super 和this
- 基于GDI+计算机图形程序设计
- 关于图片的工具类
- TIM_CtrlPWMOutputs()函数功能介绍
- javascript 点击事件执行两次js问题
- 其实和app无关的anr问题分析
- LayoutInflater偷天换日,自定义属性巧解析