NOIP2016提高A組五校聯考4 square

2022-08-18 05:15:10 字數 1177 閱讀 6505

首先,設\(f_\)表示最大的以(i,j)為左下角的正方形的邊長。

轉移顯然,\(f_=\max(f_,f_,f_)+1\)

接著,再設\(g_\)表示在以\((k,l)\)為左上角,\((k+2^i-1,l+2^j-1)\)為右下角的矩陣中,最大的f。

二維rmq就不講了。

假設詢問矩陣(x,y,x1,y1),

二分答案ans(想想為什麼?)

用rmq看紅色區域中的最大f值是否合法。

注意:出題人將輸入調的太大了,要打讀入優化。

#include #include #include #include #include #include #include const int maxlongint=2147483647;

const int mo=1000000007;

const int n=1002;

using namespace std;

int f[n][n],n,m,t,g[11][11][n][n],a[n][n],logn,logm;

int read(int &n)

int min2(int x,int y)

int max2(int x,int y)

int max1(int x,int y,int z,int a)

if(rmq(x+r-1,y+r-1,x1,y1)>=r)

printf("%d\n",r);

else

if(rmq(x+l-1,y+l-1,x1,y1)>=l)

printf("%d\n",l);

else

printf("0\n");

}int main()

pref();

logn=log2(n);

logm=log2(m);

prermq();

scanf("%d",&t);

int x1,x2,y1,y2;

for(int i=1;i<=t;i++)

}

NOIP2016提高A組五校聯考1 道路規劃

我們考慮,當現在有乙個合法的集合時,如何往裡面增加乙個點,使這個集合仍然合法。假設現在有乙個合法的集合,那麼當我們加入乙個點,它的道路穿過來整個集合,那麼 然後搞一遍最長下降子串行就可以了。include include include include include const int maxlo...

NOIP2016提高A組五校聯考1 挖金礦

剛看到這題時,還在想怎麼貪心,然後很快的打完之後發現貪心是錯的。然後仔細的看了看範圍,哈哈,這不是二分嗎。二分出乙個mid,然後在所有行裡面用mid j 字首和然後找乙個最大值。最後把這些最大值加起來,判斷一下就好了。include include include include include i...

NOIP2016提高A組五校聯考1 挖金礦

答案,保留4位小數 4 3 4 3 3 5 1 6 2 6 1 3 2 9 4.4286 n m 100000 很簡單的一道題 設sum i j 表示第i列向下挖j行的字首和 假設第i列挖h i 行 設二分的答案是m,答案如果合法,那麼 n i 1s um i h i ni 1 h i m 移項 i...