qbxt國慶水題記day4

2021-08-09 02:27:42 字數 2150 閱讀 7939

#qbxt國慶水題記#

#day4#

//0 + 20 + 0 == 20

//dp(不會) + 暴力 + 找規律(沒找到)

##beautiful##

1.1 題目

從前有乙個序列 a,對於每個 a[i] 都有乙個在序列中的優美值,其定義是:序列中最長的

一段 [l,r], 滿足 l ≤ i ≤ r,且 a[i] 是這一段的中位數(以數值為第一關鍵字,下標為第二關鍵

字排序,這樣的話這一段的長度只有可能是奇數),r-l+1 就是它的優美值。

有 q 個詢問,每次給出一段區間,求區間優美值的最大值

1.2 輸入

第一行輸入 n 接下來 n 個整數,代表 ai 接下來 q,代表有 q 個區間接下來 q 行,每行

兩個整數 l, r(l <= r),表示區間的左右端點

1.3 輸出

對於每個區間的詢問,輸出答案

1.4 sample input

816 19 7 8 9 11 20 16

83 8

1 42 3

1 15 5

1 22 8

7 81.5 sample output73

1353

731.6 資料範圍৺㓖定

對於 30% 的資料滿足:1 ≤ n, q ≤ 50

對於 70% 的資料滿足:1 ≤ n, q ≤ 2000

對於 100% 的資料滿足,1 ≤ n ≤ 2000, 1 ≤ q ≤ 100000, 1 ≤ ai ≤ 200

先預處理

以每個i為中心比a[i]大的為1,小的為0

記錄左右比a[i]大的為x( 1 - i<= x <= i - 1)的樹最靠邊的在那

從中間列舉看左右位置和是否為0

**

#include#include#include#includeusing namespace std;

const int maxn = 2000 + 10;

int n,a[maxn];

int l[maxn * 2],r[maxn * 2],cnt,w[maxn],f[maxn][maxn];

int read()

while(ch >= '0' && ch <= '9')

return x * f;

}int init()

cnt = 0;

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

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

if(l[n + j] >= 0 && r[n - j] >= 0) }}

int main()

init();

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

} int t = read();

while(t--)

正解是分治+tire樹的些思想

相當於建立了乙個由01構成的trie樹

對於每乙個節點的子節點左邊表示為1 右邊表示為0

數目相當於左子樹 * 右子樹

類似有歸併排序(當然trie也可以暴力做

**

#include#include#includeusing namespace std;

const int mod = 998244353;

const int maxn = 50000 + 100;

int n,t;

long long sum;

int a[maxn];

int read()

while(ch >= '0' && ch <= '9')

return x * f;

}void dfs(int l ,int r, int k) }}

int main()

牛客國慶集訓派對Day4

a 把b n include include include includeusing namespace std int main d 由於是個完全圖,選擇乙個權值最小的點,其他所有的點向它連線就行了。注意點為1的時候輸出0 include include include includeusing...

2020牛客國慶集訓派對day4 補題

2020牛客國慶集訓派對day4 b 題意 題意 求最長等差序列的長度。dp 攤派了我講不明白,參考下這兩篇部落格吧 捂臉 傳送門1 傳送門2 include include include include include include include using namespace std ty...

湖南集訓Day4

上午的數論感覺還可以,嗯,感覺。因為畢竟我數學弱,只聽懂一半什麼的,感覺證明還是比較顯然的。話說這金牌爺長得好像我某物理老師啊 下午的題終於不是clj出的了,沒辣麼虐了。第一題疑似回文自動機,然而並不會,於是dp水了60分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...