牛客小白9 換個角度思考 離線 樹狀陣列

2021-09-02 04:59:16 字數 1546 閱讀 1888

題目鏈結

題目描述

給定乙個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數

即對於詢問 (l,r,x),你需要輸出

其中 [exp] 是乙個函式,它返回 1 當且僅當 exp 成立,其中 exp 表示某個表示式

輸入描述:

第一行兩個整數n,m

第二行n個整數表示序列a的元素,序列下標從1開始標號,保證1 ≤ ai ≤ 105

之後有m行,每行三個整數(l,r,k),保證1 ≤ l ≤ r ≤ n,且1 ≤ k ≤ 105

輸出描述:
對於每乙個詢問,輸出乙個整數表示答案後回車
輸入
5 1

1 2 3 4 5

1 5 3

輸出
3
備註:
資料範圍

1 ≤ n ≤ 105

1 ≤ m ≤ 105

思路
#include

#define n 100006

#define mem(a, b) memset(a, b, sizeof(a))

#define ll long long

#define p pair

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

using

namespace std;

struct aca[n]

, b[n]

;int ans[n]

, c[n]

;int n, m;

void

update

(int x,

int d)

}int

query

(int x)

return ans;

}int

main()

// 讀入查詢,記錄序號

for(

int i =

0; i < m;

++i)

// 分別公升序排列

sort

(a, a + n,[&

](const ac &x,

const ac &y));

sort

(b, b + m,[&

](const ac &x,

const ac &y));

// j列舉原陣列 1-n 的數字

int j =0;

for(

int i =

0; i < m;

++i)

// 將答案按照序號儲存在陣列中

ans[b[i]

.id]

=query

(b[i]

.r)-

query

(b[i]

.l -1)

;}for(

int i =

1; i <= m;

++i)

return0;

}

換個角度思考(牛客4 30 樹狀陣列)

題目鏈結 題目描述 給定乙個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數 即對於詢問 l,r,x l,r,x l,r,x 你需要輸出 i lr a i x sum a i le x i lr ai x 的值 其中 ex p exp exp 是乙個函式,它返回 1 當且僅當 exp 成立...

牛客小白月賽9 A B C E F H J

a 簽到 ans 1 都沒有扔下來的概率 處理逆元取模即可 include define ll long long using namespace std const int mod 1e9 7 ll ksm ll a,ll b return ans int main include define ...

牛客小白月賽13 H(單調棧 樹狀陣列)

題意 給乙個柱狀圖,包括每個矩陣的寬度和高度,求能組成的最大矩陣的面積。思路 顯然最大矩陣的高一定為n個矩陣中的乙個矩陣的高,所以不訪用單調棧求出每個矩陣左邊 右邊第乙個高度小於該矩陣的下標。然後用樹狀陣列求出該區間的寬度和,遍歷一遍即可得到結果。演算法複雜度o nlogn 順便吐槽這題資料,一朋友...