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

2021-08-04 07:02:24 字數 960 閱讀 2626

//cf 301d

//題目大意:一段序列(只包含1—n),乙個數如果是另乙個數(包括本身)的因子則成為一對,求某個區間內的對數

//大概思路:

//

// 記錄每個數的位置;

// 離線操作;

// i從左往右掃一遍,判斷a[i]*j(1<= j<= n/a[i])的位置p,

// 如果p<= i,則在i位置上加一

// 如果p> i,則在p位置上記錄i,當再次掃到p時在i位置上加一

// 這樣就避免了重複統計的問題(可以在紙上畫一畫),用樹狀陣列統計求和

#include #include #include #include #include #include #include #include #include #include #include #include #include #define n 200020

using namespace std;

int a[n], b[n], c[n], r[n], l[n], ans[n], n, m;

vectorask[n];

vectord[n];

void add(int x)

}int sum(int x)

return s;

}int main()

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

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

for(int j= 0; j< (int)ask[i].size(); j++)

}for(int i= 1; i<= m; i++) printf("%d\n", ans[i]);

}return 0;

}

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

頹頹頹 題目大意 給你m個區間詢問,詢問區間內有多少個不相同的數以及存不存在一種數字組成的數列為等差間隔的數列。解 離線詢問,不相同的數其實是老做法了,但是巧妙的是數字是否為等差間隔。我們把詢問按右區間排序,可知等差間隔必然是連續的一段,那麼從當前列舉點往左,合法數列必然是連續的一段,那麼我們用樹狀...

CF1468A LaIS dp,樹狀陣列

給出乙個長度為 n 的序列 a 1,a 2,a n 請找出乙個子串行 b 1,b 2,b k 使其滿足 min b 1,b 2 le min b 2,b 3 le le min b b k 求出 k 的最大值。lais 中由乙個子串行滿足是 is 並且元素距離不超過 2,稱為這個 lais 的核 我...

CF 427D 字尾陣列

題意 求兩串字串的公共最短子串,且這個子串只在任意一串中出現一次 首先明確字尾陣列將所有的字尾 也可以視為第i個點開始的子串 字典序排列,將最近似的子串集合在一起。lcp求的是附近兩個子串的最長公共字首 如果某乙個子串當且僅當出現兩次,則必須是lcp i 是區域性最大。該子串最大長度為lcp i 最...