description
成都的駕駛考試在乙個有n條平行的自南向北的單向的道路的場地中進行。每條道路長度為m公尺,並且都在同一條水平線上開始和結束。街道從西向東分別編號為1到n。同樣有p條單向的自西向東或自東向西的街道垂直於上面描述的街道,每一條這樣的街道鏈結了兩個相鄰的自南向北的道路。當然自西向東和自東向西的道路可以重疊,那就是乙個雙向的街道了。
考生選擇乙個自南向北的道路作為他考試的起始點和另外乙個自南向北的道路作為他考試的終止點。他們的考試專案是將車從開始的道路駕駛到作為終止點的道路。考生們總是選擇乙個可以到達所有其他街道的起始道路作為開始點。現在,考生們總是感到十分無趣因為他們只有很少的起始道路可以選擇,所以教練們決定改造先有的考試場所,由於經費的限制,他們決定新增至多k條東西向的道路,使得能夠選擇的起始道路盡量地多。
input
輸入第一行包含四個整數n,m,p和k(2<=n<=100000, 1<=m,k<=100000, 0<=p<=100000)。分別表示南北向的道路數,南北向道路的長度,東西向的道路數和最多能夠新增的道路數。接下來p行,每行包含三個整數ni,mi和di(1 < = ni < n,0 < = mi < m,di = 0 or 1),表示一條自西向東(di = 0)或者自東向西(di = 1)的道路。這個道路連線了南北向的道路ni和ni+1,在第mi公尺的地方進行了連線。
output
輸出中僅包含乙個整數,最大的能夠作為起點的道路數(不包括原來就能作為起點的道路數)。注意新增的道路不能與南北向的道路相交,並且到起始水平線的距離為整數。新增的道路可以重疊,表示雙向的道路。
首先跪%一波大神的題解
我們考慮一下這道題,i可以作為起點,那麼i就可以到第1條和第n條南北道路,如果我們將邊反過來,就說明如果第1和第n條路可以到達i,那麼i就是乙個合法的起點。
我們設fl[i]表示從1到達i需要新增的邊數,設fr[i]表示從i到達n需要新增的邊數,然後我們可以發現,fl[i]=i-1-左邊的最長不降子串行長度,這個可以用樹狀陣列\(o(n log n)\)維護,fr[i]亦然
最後我們要求i,j(i<=j),使得fr[i]+fl[j]<=k
由於fl單調遞增,fr單調遞減,雙指標維護一下即可
/*program from wolfycz*/
#include#include#include#include#include#define inf 0x7f7f7f7f
#define lowbit(x) ((x)&(-x))
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read()
inline void print(int x)
const int n=1e5;
int tree[n+10],f[n+10];
int fl[n+10],fr[n+10];
int n,m,p,k;
struct s1
}l,r;
void insert(int x,int v)
int query(int x)
int main()
for (int i=1,res=0;i<=n;i++)
memset(f,0,sizeof(f));
memset(tree,0,sizeof(tree));
for (int i=n,res=0;i;i--)
for (int i=1,j=1;i<=n;i++)
printf("%d\n",ans-cnt);
return 0;
}
POI 2007 旅遊景點
題目鏈結 演算法 首先,用dijkstra演算法求出2 k 1到每個點的最短路 然後,我們用f s i 表示目前停留城市集合為s,現在在城市i,最短的路徑 狀壓dp即可 includeusing namespace std define maxn 20010 define maxm 200010 d...
POI2007 山峰和山谷Grz
description fgd小朋友特別喜歡爬山,在爬山的時候他就在研究山峰和山谷。為了能夠讓他對他的旅程有乙個安排,他想知道山峰和山谷的數量。給定乙個地圖,為fgd想要旅行的區域,地圖被分為 n times n 的網格,每個格仔 i,j 的高度w i,j 是給定的。若兩個格仔有公共頂點,那麼他們就...
POI2007 四進製的天平Wag
description mary準備舉辦乙個聚會,她準備邀請很多的人參加她的聚會。並且她準備給每位來賓準備一些金子作為禮物。為了不傷及每個人的臉面,每個人獲得的金子必須相同。mary將要用乙個天平來稱量出金子。她有很多的砝碼,所有砝碼的質量都是4的冪。mary將金子置於左邊並且將砝碼置於右盤或者兩個...