洛谷 SPOJ SP3267 題解

2022-05-12 06:52:54 字數 1326 閱讀 7846

若想要深入學***樹,傳送門。

description:

給定數列 \(\\) ,求閉區間 \([l,r]\) 的互異的個數。

method:

掃瞄序列建立可持續化線段樹,若此元素是第一次出現,就將對應的線段樹中的位置加1;反之,就將上乙個出現的元素對應的線段樹中的位置減1,將此元素對應的線段樹中的位置加1。

對於查詢的 \([l,r]\) ,在第 \(r\) 個版本的線段樹上查詢位置 \(l\) ,對經過的區間中的和累加一下即可。

code:

#include#define int long long 

#define maxn 30010

using namespace std;

inline void read(int &x)

while(s>='0'&&s<='9')

x*=f;

}int n,q;

int a[maxn];

int tot=0;

struct segtree

tree[maxn<<5];

int rt[maxn];

inline void init()

inline void pushup(int rt)

inline int build(int l,int r)

int mid=(l+r)/2;

tree[rt].ls=build(l,mid);

tree[rt].rs=build(mid+1,r);

pushup(rt);

return rt;

}int update(int k,int l,int r,int root,int val)

int mid=(l+r)/2;

if(k<=mid) tree[rt].ls=update(k,l,mid,tree[rt].ls,val);

else tree[rt].rs=update(k,mid+1,r,tree[rt].rs,val);

pushup(rt);

return rt;

}int query(int l,int r,int rt,int pos)

mapmp;

signed main()

rt[0]=build(1,n);

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

else

mp[a[i]]=i;

}read(q);

while(q--)

return 0;

}

洛谷 比賽題解

這套題的題目質量很高,寫一發題解。t1 cjwssb最近在物理學科上遇到了難題,他不會計算乙個電路中的總電阻,現在他找到了你,希望你能幫助他。這個電路有如下限定 1 電路只由導線以及電阻為一歐的電阻組成 2 保證電路從左到右連線,即每個電阻或導線的兩個連線點xy保證x 我們可以用dfs求解,這個電路...

洛谷 1196 題解

有30000 30000 3000 0個佇列,初始每個佇列裡有元素1,2 3 30000 1,2,3 cdots 30000 1,2,3 3000 0。兩種指令 1.m mmi iij jj 編號為i ii的佇列整個接到jjj上 2.c cci iij jj 問編號為i ii,j jj的兩個點之間 ...

洛谷1087題解

problem description 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,即含有 0 又含有 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點 b結點和i結點三種。由乙個長度為2 n的 01 串s可以構造出一棵fbi樹t,遞迴的構...