【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;
}
相關文章
- POJ 2528 Mayor's posters (線段樹 區間更新+離散化)
- POJ 2582 Mayor's posters 線段樹入門題+離散化
- POJ 2528 Mayor's posters (線段樹區間更新 + 離散化)
- HDU4991 Ordered Subsequence (dp+樹狀陣列+離散化)陣列
- hdu5489 ||2015合肥網路賽1006 dp+離散化樹狀陣列優化陣列優化
- 離散化
- 【離散優化】覆蓋問題優化
- 可持久化線段樹持久化
- CF940E Cashback 線段樹優化DP優化
- hdu4325 樹狀陣列+離散化陣列
- HDU 5862 Counting Intersections(樹狀陣列+掃描線+離散化)陣列
- 線段樹最佳化建圖
- 運籌優化(十四)--離散優化的啟發式演算法優化演算法
- hdu4288 離線處理線段樹
- 連續特徵離散化和歸一化特徵
- 「學習筆記」可持久化線段樹筆記持久化
- 演算法隨筆——主席樹(可持久化線段樹)演算法持久化
- 二維座標離散化模板
- 【資料結構】可持久化線段樹初步資料結構持久化
- 「學習筆記」線段樹標記永久化筆記
- P3834 【模板】可持久化線段樹 2持久化
- 區間k小值(可持久化線段樹)持久化
- 【主席樹】P3919 【模板】可持久化線段樹 1持久化
- hdu 2665 可持久化線段樹求區間第K大值(函式式線段樹||主席樹)持久化函式
- 線段樹最佳化建圖學習筆記筆記
- 可持久化線段————主席樹(洛谷p3834)持久化
- Codeforces Round #406 (Div. 1) B. Legacy(線段樹優化建圖)優化
- 線~段~樹
- 線段樹
- LeetCode 493. 翻轉對(歸併排序 || 離散化+樹狀陣列)LeetCode排序陣列
- HDU 3333 Turing Tree(線段樹+離線操作)
- BZOJ 1835 [ZJOI2010]base 基站選址:線段樹優化dp優化
- 最佳化半群結構的線段樹資訊維護
- 線段樹 hate it
- 【模版】線段樹
- 01 線段樹
- 線段樹--RMQMQ
- 李超線段樹