線段樹專題 2 蒟蒻訓練歷程記錄 HDU5775

2021-07-15 20:33:09 字數 1228 閱讀 4867

#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#include#include#include#include//線段樹單點更新查詢

using namespace std;

typedef long long ll;

#define n 100010

int g[4*n];

typedef struct aa;

a a[n];

bool cmp(a a, a b)

void init(int rt, int l , int r)//遞迴建立線段樹

int mid = (l+r) >> 1;

init(rt<<1, l, mid);

init(rt<<1|1, mid+1, r);

g[rt] = 0;

} int find(int rt, int l, int r, int l, int r)//遞迴查詢

int k1 = 0, k2 = 0;

int mid = (l+r) >> 1;

if(mid >= l)//這個地方區間要跟所查詢的總區間相比較而不是目前查詢的區間

if(mid < r)

return k1+k2;

} void update(int rt, int l, int r, int x)//要記住一直更新的都是現在的根節點。。

int mid = (l+r) >> 1;

if(x <= mid)//這回是拿查詢的值跟mid作比較

if(mid < x) }

int main()

init(1, 1, n);//初始化建樹

for(int i = n; i >= 1; i--)

sort(a+1, a+n+1, cmp);

printf("case #%d:", ++num);

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

printf("\n");

} return 0;

}

這道題樓主思路想對了,就是尋找陣列中的乙個元素前面比它大的個數和後面比它小的個數取最大值。可是比賽的時候完全沒有想到用線段樹來進行查詢啊。。。於是生無可戀臉的磨完了比賽~啊啊太弱了好憂桑~還是好好訓練吧~o( ̄ε ̄*)

蒟蒻的線段樹

struct node ll a maxn node tr maxn 2 至於為什麼陣列要開4倍 能用就行 以及區間查詢 ll query int x,int l,int r interval sum if tr x tag 0 下推lazy tag 區間更新時使用 int mid tr x l t...

bzoj4636 蒟蒻的數列 線段樹

蒟蒻的數列 bzoj 4636 題目大意 給定乙個序列,初始均為0。n次操作 每次講一段區間中小於k的數都變成k。操作的最後詢問全域性和。注釋 1 le n le 4 cdot 10 4 想法 那個操作就是乙個不好好說話的操作,說白了就是對區間的每乙個數取max 然後我們對於那個序列建立分治線段樹。...

最小生成樹(蒟蒻)

模板 修建道路 題面 farmer john最近得到了一些新的農場,他想新修一些道路使得他的所有農場可以經過原有的或是新修的道路互達 也就是說,從任乙個農場都可以經過一些首尾相連道路到達剩下的所有農場 有些農場之間原本就有道路相連。所有n 1 n 1,000 個農場 用1.n順次編號 在地圖上都表示...