GDFZOJ Problem64新年團隊 題解

2021-07-28 08:08:43 字數 1240 閱讀 2477

題目:

簡單說明題意:

給出a陣列,v[i]為滿足a[i] == a[j] && i < j的最小的j。

然後多次給出l, r,求區間l~r間最小的v[i]。

我們第乙個想法是遍歷,很好,可以排除掉它了。

接下來開始分析。

a沒有被修改過,也就是說可以預處理一下。

那麼分塊怎麼樣?

先找乙個k,隨意地把它設為塊的大小。

然後離散化(通俗的說就是把a陣列的數編個號拿出來),排序。

然後就可以簡單易懂地搞出來任意兩塊之間的答案了。

查詢的時候只要查一下有沒有被完全覆蓋的幾個塊,先更新一次答案。

兩邊剩下的零頭就遍歷一遍好了。

怕tle?都分好塊了怎麼會t?每次查詢複雜度最多2k吧。。。

接下來上**

#include

#include

#include

using namespace std;

const int maxn = 500500;

const int inf = 2147483647;

const int k = 150;

const int maxks = 3500;

int a[maxn], b[maxn], t[maxn], v[maxn], next[maxn], f[maxks][maxks];

bool cmp(int

x, int

y) int min(int a, int b, int c)

int main()

sort(b+1, b+n+1, cmp);

int ks = (n/k) + 1;

memset(f, 0x7f, sizeof(f));

for(int i = 2; i <= n; i++)

if(a[b[i]] == a[b[i-1]])

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

for(int j = i+1; j <= ks; j++)

f[i][j] = min(f[i][j-1], f[j][j], f[i][j]);

int ans = 0;

while(m--)

else

}return

0;}

最後提一下,k,一般來說取n的二分之一次方,三分之一好像更快,所以說5s的時限確實挺長的。。

相信玄學150, 1s穩穩過!

解碼base64 Base64原理

一 為什麼會產生base64編碼?因為有些老的通訊協議 比如smtp 只支援傳遞可見字元,無法傳輸像回車 空格等不可見的控制字元,像這種二進位制檔案,其中可能含有不可見字元,那老的傳輸協議為了能夠傳輸,就需要有個編碼規則,把二進位制檔案中的不可見字元全部編碼成可見字元,所以就誕生了base64編碼規...

iOS工程如何支援64 bit arm64

詳細訊息位址為 關於xcode build setting 中的architectures引數問題 關於指令集如下參考 armv8 arm64 iphone 6 plus iphone 5s,ipad air 2 retina ipad mini 2,3 armv7s iphone 5,iphone...

64位記憶體

64位系統最顯著的優點是它可以使用超過4gb的記憶體。為什麼32位的系統只能顯示3g記憶體 實際上是3.25g 呢?這是由於系統本身的限制所造成的。32位系統對於記憶體的定址能力總共就4g,而4g裡還要放其他東西 比如系統 bios,輸入輸出裝置的位址和設定,各類介面的設定和位址等等,這些位址和設定...