題目鏈結
題目描述
給定乙個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數
即對於詢問 (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 順便吐槽這題資料,一朋友...