似乎沒有人打平衡樹的題解,那我就來水一發~
我們將題目做乙個簡單的轉化:
設\(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 的做法就是維護乙個堆就可以了,所以擴充套件下就是分塊,然後每個塊維護乙個堆。散塊暴力,大塊直接查。但是有個很坑爹的問題在於,對於整塊的部分我們沒...