若想要深入學***樹,傳送門。
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,遞迴的構...