區間的關係的計數 HDU 4638 離線 樹狀陣列

2022-05-01 20:06:08 字數 1122 閱讀 4420

題目大意:給你n個人,每個人都有乙個id,有m個詢問,每次詢問乙個區間[l,r],問該區間內部有多少的id是連續的(單獨的也算是乙個)

思路:做了那麼多離線+樹狀陣列的題目,感覺這種東西就是乙個模板了,23333,反正都是定義右區間的。

這題的關鍵難度就是如何定義id是連續的呢。我們每次往區間裡面放乙個數值以後都要add(pos, 1),就是把pos~n的所有的關係都+1.然後如果說在pos之前就出現id-1,就要add(pos[id-1], -1)(同理id+1也是這樣),這樣子表示從pos[id-1]~n開始,後面的全都和他是存在組隊的關係的,接下來就簡單了。

//

看看會不會爆int!陣列會不會少了一維!

//取物問題一定要小心先手勝利的條件

#include using

namespace

std;

#define ll long long

#define all(a) a.begin(), a.end()

#define pb push_back

#define mk make_pair

#define fi first

#define se second

const

int maxn = 1e5 + 5

;vector

int, int> >q[maxn];

intpos[maxn], a[maxn], tree[maxn], ans[maxn];

intn, m;

inline

int lowbit(int x)

void update(int x, int

val)

}int sum(int

x)

return

ans;

}int

main()

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

memset(tree,

0, sizeof

(tree));

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

}for (int i = 1; i <= m; i++)

}return0;

}

view code

hdu4638 問一段區間能組成多少段連續的數

題 題意 題意為詢問一段區間裡的數能組成多少段連續的數。分析 我們先從左到右地新增數,再假定新增進去的話那麼連續段數就加1,由此我們加入乙個數x後,要是x 1或x 1在這之前就已經加進去了,那麼連續段數就要減一,要是x 1和x 1同時在之前已經加進去了那麼就要減二 includeusing name...

區間估計與假設檢驗的關係

區間估計與假設檢驗的關係 區間估計單側上限 sid e 0,p 統計量 x 1 p 統計量 side 0,p text x 1 alpha rightarrow p text x alpha side 0,p 統計量 x 1 p 統計量 所以,拒絕域形式 與 備擇假設 h 1h 1 h1 形式相同,...

HDU 5696 區間的價值

我們定義 區間的價值 為一段區間的最大值 最小值。乙個區間左端點在 l 右端點在 r 那麼該區間的長度為 r l 1 現在聰明的傑西想要知道,對於長度為 k 的區間,最大價值的區間價值是多少。當然,由於這個問題過於簡單。我們肯定得加強一下。我們想要知道的是,對於長度為 1 n的區間,最大價值的區間價...