BZOJ 2727 雙十字(樹狀陣列)

2021-09-07 23:10:50 字數 1012 閱讀 5574

題意:

思路:思路來自這裡。首先對於每個位置(i,j)用c[i][j]表示該位置同時向左右能延伸的最大長度,用down[i][j]表示向下能延伸的最大長度(其實這裡可以用一維的)。然後就是統計。我們一列一列列舉。對於每一列,一行一行來。每次到達一行,(i,k),若c[i][k]>0就可以統計答案了。若該行的上面有一行j(當然j0,那麼就要增加答案了。設k列最上的1的行為top。可知:

我們不管dowm[i][j]的話,可以得到三個引數:

因此我們只要開三個樹狀陣列維護上面三個值就可以了。

i64 s1[n],s2[n],s3[n];

int d[n],n,m,k,l[n],r[n],c[n],down[n];

void up(i64 &x,i64 y)

void add(i64 s,int p,i64 x)

i64 get(i64 s,int p)

int id(int i,int j)

void init()

for(j=m-1;j>=1;j--)

for1(j,m) c[id(i,j)]=min(l[id(i,j)],r[id(i,j)]);

}for1(j,m) }}

int top,pre;

void clear()

i64 ans;

void update(i64 x,int i,int j)

i64 s(i64 x)

void deal()

if(c[id(i,j)]) pre=i;}}

}pr(ans);

}int main()

BZOJ2727 雙十字(動態規劃,樹狀陣列)

bzoj 洛谷我們去年暑假的時候考試考過。我當時寫了個大暴力混了 70 70 分。大暴力是這麼寫的 預處理每個位置向左右 上 下能夠拓展的最多的長度 左右相當於分別求然後取mi n min 接著列舉雙十字的中軸線,所在的列 然後列舉上面那一行,列舉下面那一行。那麼,貢獻顯然是上面選擇的左右長度 下面...

2727 仙島求藥

總時間限制 1000ms 記憶體限制 65536kb 描述 少年李逍遙的嬸嬸病了,王小虎介紹他去一趟仙靈島,向仙女姐姐要仙丹救嬸嬸。叛逆但孝順的李逍遙闖進了仙靈島,克服了千險萬難來到島的中心,發現仙藥擺在了迷陣的深處。迷陣由m n個方格組成,有的方格內有可以瞬秒李逍遙的怪物,而有的方格內則是安全。現...

題解 Loj2727舞會

n 個數,其中有 m 個位置的數是確定的,另外的數隨意排列。每次操作把最前面三個數取出,把它們的中位數取出來放到最後,然後刪掉這三個數。通過合適的排列,使最後留下來的數最大。首先這類有關中位數的問題,可以二分後轉化為操作 01 序列的問題。每次二分乙個有可能的答案 mid 把 mid 換成一,的數換...