CF 351D, 離線處理 樹狀陣列 莫隊演算法

2022-07-27 05:21:12 字數 2057 閱讀 5481

頹頹頹

題目大意:給你m個區間詢問,詢問區間內有多少個不相同的數以及存不存在一種數字組成的數列為等差間隔的數列。

解:離線詢問,不相同的數其實是老做法了,但是巧妙的是數字是否為等差間隔。我們把詢問按右區間排序,可知等差間隔必然是連續的一段,那麼從當前列舉點往左,合法數列必然是連續的一段,那麼我們用樹狀陣列+1-1維護區間延伸到**,然後詢問[l,i]當中和是否為零就知道有沒有符合的連續一段等差間隔數列了。

順便這題官解是莫隊,正好我也去研究一下莫隊吧,現在先貼乙個離線nlogn的做法,遞迴學會莫隊後再來補充。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include

9 #include 10 #include 11 #include 12 #include 13 #include 14

15using

namespace

std;

1617

const

double eps = 1e-8;18

19#define abs(x) ((x)<0?(-(x)):(x))

20#define sqr(x) ((x)*(x))

21#define min(a,b) ((a)

22#define max(a,b) ((a)>(b)?(a):(b))

2324

#define lson(x) ((x)<<1)

25#define rson(x) (((x)<<1)+1)

26#define lowbit(x) ((x)&(-(x)))

27#define maxs 1111

28#define maxn 222222

29#define voidpoint 0

30#define ll long long

31#define oo 214748364

32#define inf 0x3f3f3f3f

33#define mp(x,y) make_pair(x,y)

3435

struct

treearray

41void add(int x, int num = 1

) 47}48

intget(int

x) 54

return

res;55}

5657

} color, sl;

5859

struct

query

62bool

operator

< (const query &rhs) const

65} q[maxn];

6667

inta[maxn], n, m, ans[maxn];

68int

pre[maxn], f[maxn], last[maxn];

6970

intmain() else

88 f[i] =f[pre[i]];

89 } else

90 f[i] = -1

;91 last[a[i]] =i;92}

93 scanf("

%d", &m);

94for (int i = 0; i < m; ++i)

98 sort(q, q+m);

99100

101for (int i = 1, j = 0; i <= n; ++i) else

112 } else

115116

while (j < m && q[j].r ==i)

130}

131}

132133

for (int i = 0; i < m; ++i) printf("

%d\n

", ans[i]);

134135

return0;

136 }

cf 351d

CF301D(樹狀陣列,離線統計,區間求和)

cf 301d 題目大意 一段序列 只包含1 n 乙個數如果是另乙個數 包括本身 的因子則成為一對,求某個區間內的對數 大概思路 記錄每個數的位置 離線操作 i從左往右掃一遍,判斷a i j 1 j n a i 的位置p,如果p i,則在i位置上加一 如果p i,則在p位置上記錄i,當再次掃到p時在...

cf 1187D 逆序對(線段樹)

題意 給你兩個均有n個數的陣列,現在你可以對a陣列中的任意區間進行sort操作,問你在sort完之後能不能得到b陣列。做法 這個是真的想不到啊。想法2200分的題目,大概的意思就是,因為可以對其中的任意區間進行操作,等於是去找逆序對的樣子,for每個數,當前數字在原陣列位置前不能有更小的未被消去的值...

bzoj 3339 線段樹離線處理

題意 給定乙個n個數的序列,多次詢問,每次詢問區間 l,r 的mex 直接暴力顯然不可 區間 l,r 和區間 l r mex的情況 1 l,r 和 l r 的mex值不同 l,r 的mex值在 l r 中出現 或 原本在 l,r 中存在而不在 l r 中存在從而成為 l r 的mex值 反之同理 2...