#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分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...