【dp+離散化+線段樹優化】Paint
題意: 求不相交的區間集合,沒有覆蓋到的範圍最小
#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;
}
相關文章
- HDU 1542 Atlantis (線段樹+離散化+掃描線)
- ECNU OJ 3353 塗黑板(線段樹離散化)
- POJ 2528 Mayor's posters (線段樹 區間更新+離散化)
- HDU 1255 覆蓋的面積(線段樹+掃描線+離散化)
- 洛谷P1712 [NOI2016]區間 尺取法+線段樹+離散化
- 離散化
- 【離散優化】覆蓋問題優化
- HDU 5862 Counting Intersections(樹狀陣列+掃描線+離散化)陣列
- CF940E Cashback 線段樹優化DP優化
- 可持久化線段樹持久化
- 運籌優化(十四)--離散優化的啟發式演算法優化演算法
- 線段樹最佳化建圖
- 【主席數】可持續化線段樹
- BZOJ 1835 [ZJOI2010]base 基站選址:線段樹優化dp優化
- HDU 3333 Turing Tree(線段樹+離線操作)
- 「學習筆記」可持久化線段樹筆記持久化
- 演算法隨筆——主席樹(可持久化線段樹)演算法持久化
- 【主席樹】P3919 【模板】可持久化線段樹 1持久化
- 「學習筆記」線段樹標記永久化筆記
- 區間k小值(可持久化線段樹)持久化
- P3834 【模板】可持久化線段樹 2持久化
- 【資料結構】可持久化線段樹初步資料結構持久化
- P1295 [TJOI2011]書架 線段樹優化dp,單調棧優化
- 二維座標離散化模板
- Making the Grade POJ - 3666(離散化+dp)
- LeetCode 493. 翻轉對(歸併排序 || 離散化+樹狀陣列)LeetCode排序陣列
- 線段樹最佳化建圖學習筆記筆記
- 可持久化線段————主席樹(洛谷p3834)持久化
- 線~段~樹
- 線段樹
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- vijos1237-隱形的翅膀【離散化】
- 線段樹最佳化 DP & CF833B The Bakery 題解
- 線段樹模板
- 線段樹--RMQMQ
- 01 線段樹
- 線段樹 hate it
- 【模版】線段樹
- 洛谷 P3919 可持久化線段樹 1 之主席樹模板(初級)持久化