BZOJ5016 Snoi2017 乙個簡單的詢問

2022-05-07 22:45:30 字數 802 閱讀 1643

題面:bzoj

這題的ider挺有意思的。看看資料範圍,多半是莫隊,但直接統計答案又不行(有4個引數啊),來拆式子,設\(q(i,j)=\sum_^cnt[0..i][x]\times cnt[0..j][x]\),這個是可以用莫隊做的,那怎麼用它把題中的式子表示出來呢?有:

\(ans(l1,r1,l2,r2)\)

\(=\sum_^cnt[l1..r1][x]\times cnt[l2..r2][x]\)

\(=\sum_^(cnt[0..r1][x]-cnt[0..l1-1][x])\times (cnt[0..r2][x]-cnt[0..l2-1][x])\)

\(=q(r1,r2)-q(r1,l2-1)-q(l1-1,r2)+q(l1-1,l2-1)\)

#include#include#include#define n 50005

#define ll long long

using namespace std;

inline int in()

int n,m,a[n],t[n],tc,id[n][4],bc,cnt[n][2],qc=0;

ll res=0,ans[n*4];

struct qq[n*4];

inline bool cmp(q a,q b)

for(int i=1;i<=m;++i) printf("%lld\n",ans[id[i][0]]

-ans[id[i][1]]-ans[id[i][2]]+ans[id[i][3]]);

return 0;

}

bzoj5018 Snoi2017 英雄聯盟

description 正在上大學的小皮球熱愛英雄聯盟這款遊戲,而且打的很菜,被們戲稱為 小學生 現在,小皮球終於受不 了們的嘲諷,決定變強了,他變強的方法就是 買 小皮球只會玩n個英雄,因此,他也只準備給這n個英 雄買 並且決定,以後只玩有 的英雄。這n個英雄中,第i個英雄有ki款 是每款ciq幣...

bzoj5018 Snoi2017 英雄聯盟

題目 嗯,其實吧,還是算比較顯然的dp。f i j 表示前 i個英雄 用了j 元錢的最 多方案數 最後答 案就是滿 足f n j m最小 的j了。轉移方法,首先 肯定要 列舉i,然後列舉 當前買幾 個 j 再列舉 l表示f i l 從什 麼轉移過 來。注意 每次l 的上界是 當前買所 有 的 這樣,...

bzoj5018 Snoi2017 英雄聯盟

10.5重回bzoj。刷了這道揹包dp交了10次。不過這個真的是一道好題。也許是我dp太爛 由於錢數較小,容易想到,f i 表示花了i元所有的展示策略個數。然而在dp的時候卻有乙個問題,我們列舉買的 個數維護揹包時,有可能同乙個英雄不同 數疊乘,這樣就不對了,所以dp時先從後將更新的位置列舉出來,再...