bzoj
洛谷我們去年暑假的時候考試考過。
我當時寫了個大暴力混了
70 70
分。。。。
大暴力是這麼寫的:
預處理每個位置向左右/上/下能夠拓展的最多的長度(左右相當於分別求然後取mi
n min
) 接著列舉雙十字的中軸線,所在的列
然後列舉上面那一行,列舉下面那一行。
那麼,貢獻顯然是上面選擇的左右長度
∗ ∗
下面可以選擇的左右長度
∗' role="presentation">∗
∗上下兩行分別向上/下拓展的長度。
發現複雜度瓶頸在於列舉完上面那一行之後又去列舉下面那一行。
這個東西顯然可以字首和優化,那麼每次修改都是乙個區間加法,並且還是加等差數列。
線段樹或者樹狀陣列就好啦?
線段樹怎麼維護可以參考洛谷上那道無聊的數列
樹狀陣列的做法,首先要知道怎麼維護區間加法
核心思想是差分。
我們要加乙個等差數列,如果只進行一次差分,那麼就是給差分陣列做區間加法。
這樣顯然還不行,所以我們對於差分陣列再差分一次,假設得到的陣列是ci
c
i,原陣列是ai
a
i,差分一次的結果是bi
b
i那麼 ∑i
=1xa
i=∑i
=1x∑
j=1i
b[i]
=∑i=
1x(x
−i+1
)b[i
]=∑i
=1x(
x−i+
1)∑j
=1ic
[i]=
∑i=1
xc[i
]∑j=
ix(x
−j+1
)=∑i
=1xc
[i]×
12(n
−i+2
)(n−
i+1)
=12∑
i=1x
c[i]
((n2
+3n+
2)−(
i2+(
2n+3
)i))
∑ i=
1xai
=∑i=
1x∑j
=1ib
[i]=
∑i=1
x(x−
i+1)
b[i]
=∑i=
1x(x
−i+1
)∑j=
1ic[
i]=∑
i=1x
c[i]
∑j=i
x(x−
j+1)
=∑i=
1xc[
i]×1
2(n−
i+2)
(n−i
+1)=
12∑i
=1xc
[i](
(n2+
3n+2
)−(i
2+(2
n+3)
i)
)用樹狀陣列維護c[
i],i
c[i]
,i2c
[i] c[i
],ic
[i],
i2c[
i]
即可。
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define rg register
#define max 1500000
#define mod 1000000009
#define inv2 500000005
#define id(x,y) ((x-1)*m+y)
inline
int read()
void add(int &x,int y)
bool vis[max];
int n,m,l[max],u[max],d[max],ans,k;
int c1[max],c2[max],c3[max];
inline
int lb(int x)
void modify(int x,int w)
}int getsum(int x)
void modify(int l,int r,int w)
void init()
int main()
}for(int i=1;i<=n;++i)//right
}for(int j=1;j<=m;++j)//up
}for(int j=1;j<=m;++j)//down
}for(int j=2;jfor(int i=3;iint u=id(i,j);
if(!vis[u])
if(l[u])add(ans,1ll*d[u]*getsum(l[u]-1)%mod);
modify(1,l[u-m],u[u-m]);
}printf("%d\n",ans);
return
0;}
BZOJ 2727 雙十字(樹狀陣列)
題意 思路 思路來自這裡。首先對於每個位置 i,j 用c i j 表示該位置同時向左右能延伸的最大長度,用down i j 表示向下能延伸的最大長度 其實這裡可以用一維的 然後就是統計。我們一列一列列舉。對於每一列,一行一行來。每次到達一行,i,k 若c i k 0就可以統計答案了。若該行的上面有一...
2727 仙島求藥
總時間限制 1000ms 記憶體限制 65536kb 描述 少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現...
題解 Loj2727舞會
n 個數,其中有 m 個位置的數是確定的,另外的數隨意排列。每次操作把最前面三個數取出,把它們的中位數取出來放到最後,然後刪掉這三個數。通過合適的排列,使最後留下來的數最大。首先這類有關中位數的問題,可以二分後轉化為操作 01 序列的問題。每次二分乙個有可能的答案 mid 把 mid 換成一,的數換...