BJOI2016 迴轉壽司

2022-07-02 02:15:10 字數 1113 閱讀 5393

似乎沒有人打平衡樹的題解,那我就來水一發~

我們將題目做乙個簡單的轉化:

設\(sum_i = \sum_^ a_j\)

那麼答案就是\(\sum_^\sum_^ (l \leq (sum_i - sum_) \leq r)\)

我們可以利用容斥的思想進行簡單是轉化:

\(\sum_^\sum_^ (l \leq (sum_i - sum_)) - \sum_^\sum_^ (r < (sum_i - sum_))\)

因此,我們只用列舉\(sum_i\),並在乙個可以接受的時間複雜度內分別找到相對應的\(j\)的數目,即\(sum_ \leq sum_i - l\)的\(j\)的個數和\(sum_ \leq sum_i - r - 1\)的\(j\)的數量,並把他們相減。

而查詢這些數目完全可以用平衡樹來實現,下面的**打的是\(treap\),僅供參考。

注:題目的資料範圍似乎有問題,似乎是\(0 \leq l , r\leq 10^9\)

#include #include #include using namespace std;

typedef long long ll;

const int maxn = 1e5 + 5;

struct node t[maxn];

void zig(ll &k)

void zag(ll &k)

ll num = 0;

void insert(ll &k , ll key)

t[k].si ++;

if(t[k].data == key) t[k].cnt ++;

else if(t[k].data < key)

else

}ll n , rt;

ll x_rank(ll x)

return ans;

}ll l , r , a[maxn];

int main()

ll ans = 0;

insert(rt , 0);

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

printf("%lld" , ans);

return 0;

}

BJOI2016 迴轉壽司

題目鏈結 給定乙個長度為 n 的序列 a 和乙個區間 l,r 求多少連續子串行的權值和在區間內,即滿足 1 le i le j le n 且滿足 l le sum a i le r 的方案數。區間和,很容易想到用字首和轉換,這樣區間相關變成了兩個點。設 s 為 a 的字首和,那麼統計就變成了這樣。統...

BJOI2016 迴轉壽司 題解

傳送門qaq 給定乙個長度為 n 的序列 a 給定邊界 l 和 r 求出滿足 l le sum limits r a i le r 的 l,r 的數量。簽到題,感覺紫題太高看它了,真實難度頂多綠題。考慮列舉 r 計算出所有滿足題意的 l 的數量。設 s 為 a 的字首和陣列,若 l le s r s...

JOISC 2016 Day 3 迴轉壽司

joisc 2016 day 3 迴轉壽司 這題我無力吐槽了.強烈譴責出題人用腳造資料 其實這題主要還是部分分啟發正解吧。看到有個 s i 1,t i n 的做法就是維護乙個堆就可以了,所以擴充套件下就是分塊,然後每個塊維護乙個堆。散塊暴力,大塊直接查。但是有個很坑爹的問題在於,對於整塊的部分我們沒...