TJOI2014 上公升子串行

2022-10-11 17:36:12 字數 1417 閱讀 6197

bzoj5157

luogu3970

求原序列有多少個上公升子串行。

本來想先暴力dp一下拿個部分分,但是由於不會去重,這個思路就破滅了。

後來手玩的時候突然發現,不就是把比這個數小的答案都加起來就是它的答案了啊,形式化的說就是\(f_i=\sum f_j (j < i,a_j。

這樣的話離散化一下樹狀陣列求字首和就可以水過了...

#include #include const int n = 1e5 + 10;

const int mod = 1e9 + 7;

int f[n], a[n], b[n], n, c[n];

void add(int p, int x)

}int query(int p)

return ans;

}int main()

std::sort(c+1, c+n+1);

int now = std::unique(c+1, c+n+1) - c;

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

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

int ans = (query(n) - now + 1 + mod) % mod;

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

return 0;

}

**於:

bzoj5157

luogu3970

求原序列有多少個上公升子串行。

本來想先暴力dp一下拿個部分分,但是由於不會去重,這個思路就破滅了。

後來手玩的時候突然發現,不就是把比這個數小的答案都加起來就是它的答案了啊,形式化的說就是\(f_i=\sum f_j (j < i,a_j。

這樣的話離散化一下樹狀陣列求字首和就可以水過了...

#include #include const int n = 1e5 + 10;

const int mod = 1e9 + 7;

int f[n], a[n], b[n], n, c[n];

void add(int p, int x)

}int query(int p)

return ans;

}int main()

std::sort(c+1, c+n+1);

int now = std::unique(c+1, c+n+1) - c;

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

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

int ans = (query(n) - now + 1 + mod) % mod;

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

return 0;

}

TJOI2014 上公升子串行

bzoj5157 luogu3970 求原序列有多少個上公升子串行。本來想先暴力dp一下拿個部分分,但是由於不會去重,這個思路就破滅了。後來手玩的時候突然發現,不就是把比這個數小的答案都加起來就是它的答案了啊,形式化的說就是 f i sum f j j i,a j。這樣的話離散化一下樹狀陣列求字首和...

P3970 TJOI2014 上公升子串行

傳送門 dp十分顯然的dp,但是不好寫 設 f i 表示以第 i 個數作結尾時的方案數,原序列為 a 如果不考慮相同的序列 那麼轉移就是 f j 0 j i a j a i 複雜度為 o n 2 考慮優化 先去重 得到陣列 b 每次把f i 加到樹狀陣列裡a i 的值 在 b 中的位置的位置 那麼 ...

TJOI2014 電影評分 movie

對於每個詢問輸出答案 10 r 1 1 1 r 2 2 1 2 c 2 2 r 3 1 2 q 1 c 3 2 c 1 5 q 1 q 2 q 32 1 3 2注意n 10000 強烈譴責辣雞出題人 強烈譴責辣雞出題人 強烈譴責辣雞出題人 什麼辣雞題,n應該要多乙個0才對 首先,我打了乙個三十分暴力...