cdq。。還真是。。
一開始自己寫,設f[i]為以i結尾的最優方案,fn[i]為以i結尾的最優方案數,然後cdq完了第一問就出來了,還順便把總最優方案數算了,
and then? mengbier
然後各路%啊,乙個下午+一晚上就交代了
怎麼做呢?我們再cdq出另乙個f和fn表示以i開頭的最優方案和方案數
然後想一想i在這 l——————i——————r
然後 f[0][i]就是l~i的最優方案了,f[1][i]就是i~r的最優方案
那麼兩個一合併,再減去重複計算的i位置,假如等於最優方案,說明i出現了fn[0][i]*fn[1][i](一一組合嘛)
完成。
#include#include#include
#include
#include
#include
using
namespace
std;
typedef
long
double
ld;int
n;int s[51000];ld g[51000
];int lowbit(int x)
void change(int x,int
k,ld fan)
else
if(s[x]==k)g[x]+=fan;
x+=lowbit(x);
}}void clean(intx)}
int getmax(int x,ld &fan)
else
if(s[x]==ret)fan+=g[x];
x-=lowbit(x);
}return
ret;
}struct
node
a[51000],b[51000
];bool cmpx(node n1,node n2)
bool cmpx2(node n1,node n2)
bool cmpy(node n1,node n2)
bool cmpy2(node n1,node n2)
int lslen,ls[51000
];void
lsh()
int f[2][51000];ld fn[2][51000
];void cdq(int l,int
r)
else
if(d==f[0][a[i].x])fn[0][a[i].x]+=fan;
}for(int i=l;i<=mid;i++)clean(a[i].z);
sort(a+mid+1,a+r+1
,cmpx);
cdq(mid+1
,r);
sort(a+l,a+r+1
,cmpy);
}void cdq2(int l,int
r)
else
if(d==f[1][a[i].x])fn[1][a[i].x]+=fan;
}for(int i=l;i<=mid;i++)clean(a[i].z);
sort(a+mid+1,a+r+1
,cmpx2);
cdq2(mid+1
,r);
sort(a+l,a+r+1
,cmpy2);
}ld cao[
51000
];int
main()
else
if(mmax==f[0][i])sum+=fn[0
][i];
printf(
"%d\n
",mmax);
for(int i=1;i<=n;i++)a[i]=b[n-i+1
];
for(int i=1;i<=n;i++)a[i].z=n-a[i].z+1
;
for(int i=1;i<=n;i++)f[1][i]=1,fn[1][i]=1
; cdq2(
1,n);
for(int i=1;i<=n;i++)
if(f[0][i]+f[1][i]-1==mmax)
cao[i]=fn[0][i]*fn[1
][i];
for(int i=1;i"
%.5lf
",cao[i]/sum);
printf(
"%.5lf\n
",cao[n]/sum);
return0;
}
SDOI2011 BZOJ2244 攔截飛彈
description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度 並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還...
Bzoj2244 SDOI2011 攔截飛彈
傳送門 每個飛彈有時間,高度,速度 求時間遞增,高度,速度不降的最長的序列 然後還要求最長序列的方案以及每個飛彈在最長序列中的方案 這個就是偏序問題辣,正反兩遍求出每個飛彈為結尾開頭的序列最長長度 判斷是否在最長序列就二者相加判斷 然後記錄下方案,用do uble d ou bl e,lo nglo...
bzoj 2244 SDOI2011 攔截飛彈
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度 並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套...