參考:
題意:給定乙個初始序列1,2,3…,n.m次操作,每次將ai(
1<=a
i<=n
)a_i(1<=a_i<=n)
ai(
1<=a
i<=n
)提到第一位,求整個過程中,每個數出現的最左和左右的位置,並輸出。(
1<=n
,m
<=3
e5
)(1<=n,m<=3e5)
(1<=n
,m<=3
e5)題解:模擬,每次提數,將選中的數向前提,被提到的數,則其最左邊是1,最右可以用樹狀陣列字首和計算。
#include
using
namespace std;
#define ll long long
const
int maxn=
300010
;int n,m;
int sum[maxn<<1]
;int l[maxn]
,r[maxn]
;int a[maxn]
,pos[maxn]
;int
lowbit
(int x)
void
update
(int x,
int val)
}int
query
(int x)
intmain()
for(
int i=
1,x;i<=m;i++
)for
(int i=
1;i<=n;i++
)return0;
}
Binary Indexed Tree 樹狀陣列
做leetcode 做到meetingroomii的時候我知道不用線段樹或者樹狀陣列是不太好搞了。還是來學習一下吧。樹狀陣列算是線段樹的一種特殊情況 子集 所以樹狀陣列能解決的問題線段樹一定能做,但線段樹能做的樹狀陣列不一定能做。對乙個陣列進行如下操作 update i1,i2,operation ...
數星星 樹狀陣列
題目描述 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個...
數星星(樹狀陣列)
天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個 3 級的...