codevs線段覆蓋
5離散化+二分查詢,按右端點排序,
f[i]
代表1~i
的滿足不覆蓋的最大值,對於第
i條線段,要麼選,要麼不選,所以方程為
f[i]=max(f[i-1],f[find(i)]+e[i].v);find(i)
是從右往左數第乙個與
i不相交的線段的下標,
ans為
f[n];
#includeusingnamespace
std;
struct
line
}e[1000010
];long
long
n;long
long b[2000010
];long
long f[1000010
];long
long
ans;
void
in(long
long &x)
long
long find(long
long
x)
if (e[r].r <=e[x].l)
return
r;
else
returnl;}
intmain()
sort(b+1,b+2*n+1
);
long
long m=unique(b+1,b+2*n+1)-b-1;
for(long
long i=1;i<=n;i++)
sort(e+1,e+n+1
);
for(long
long i=1;i<=n;i++)
cout
}
CODEVS 3037 線段覆蓋 5
描述 數軸上有n條線段,線段的兩端都是整數座標,座標範圍在0 10 18,每條線段有乙個價值,請從n條線段中挑出若干條線段,使得這些線段兩兩不覆蓋 端點可以重合 且線段價值之和最大。分析 提供兩種思路 利用離散化.因為這道題本來就是離散化的例題.將點排序後依次賦值 1 2n,n為線段的條數 再通過結...
線段樹線段覆蓋(離散化 區間覆蓋)
n n 10000 個人依次貼海報,給出每張海報所貼的範圍li,ri 1 li ri 10000000 求出最後還能看見多少張海報。input 第一行 樣例個數t 第二行 貼海報的人n 第三行 每個人貼海報的範圍 接下來n行 每個人貼海報的範圍 output 對於每乙個輸入,輸出最後可以看到的海報張...
1214 線段覆蓋
貪心解法 解題思路 首先將線段端點調整為左端點小於 或等於 右端點 第二,根據右端點將線段從小到大排序 第三,掃瞄一遍,每次遇到的第乙個與當前的max不相交的即為最優選擇。實現 include includeusing namespace std const int n 101 struct nod...