題目大意:給你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開始,後面的全都和他是存在組隊的關係的,接下來就簡單了。
//view code看看會不會爆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;
}
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的區間,最大價值的區間價...