珂朵莉樹是一種基於$set$的暴力資料結構,真的很好懂(因為暴力鴨).又叫$old\ driver\ tree$,老司機樹$???$
適用於區間賦值,資料隨機.
首先來講講它的思想,它把區間$[1,n]$分成若干個$[l_i,r_i]$,$[l_i,r_i]$內的數都一樣,為$w_i$.舉栗子!區間$[1,5]$的初值為$1$.現在只有乙個區間就是$[1,5],w=1$.然後要求把$[2,4]$區間賦為$2$,於是把區間$[1,5]$拆成$[1,1],[2,4],[5,5]$,再把區間$[2,4]$的$w$賦為$2$.差不多就是這樣真的很好懂鴨.下面講$code$.
定義$ovo$
struct核心操作$assign$node
//賦初值
inline bool
operator
setq;
就是把$[l,r]$區間賦值為$w$.
#define it set::iteratorinline首先把包含$l,r$的迭代器拆成分別兩個部分$[ ,l-1],[l, ],[ ,r],[r+1, ]$,然後把區間$[l,r]$間的全部去掉,最後$insert$新的區間就$ok$辣.再講兩個細節.void assign(int l,int r,int
w)
1.必須要先$split(r+1)$,再$split(l)$.因為如果反過來$split(l)$返回的迭代器可能失效導致$ce$.舉個栗子,當前$l,r$都包含在$[l,r]$中,首先$split(l)$,變成$[l,l-1],[l,r]$,返回的迭代器是$[l,r]$的.然後$split(r+1)$,又會把$[l,r]erase$掉...
2.$$中的$erase$函式.$q.erase(l,r)$清除掉的是$[l,r)$,是左閉右開!!這裡的$r$是$l_i=r+1$的迭代器,所以清除掉的正好是$[l,r]$之間所有的.
核心操作$split$
inline it split(int這裡只要解釋一下最後一句的意思辣.$q.insert(...).first$就是插入新元素後新元素的迭代器,這時候就會想有$first$,那也有$second$叭.沒錯!$second$的意思呢就是插入成功了沒有.什麼時候插入不成功?當$set$裡已經有了這個元素時就不能在插入一樣的了.($set$中元素不重)p)
對了,這裡是我參考的優秀清楚的$blog$
$over!$
$luogu2572\ [scoi2010]$序列操作唯一要注意的是$4$操作,最多有多少個連續的$1$,可能$[l_1,r_1],[l_2,r_2],l_2=r_1+1$這兩個區間都$w=1$,可以連續起來.千萬不能列舉區間,然後直接取$ret=max(ret,i->r-i->l+1)$,要考慮能否和前面的區間連起來.
#include#define il inlineview code#define rg register
#define go(i,a,b) for(rg int i=a;i<=b;i++)
#define yes(i,a,b) for(rg int i=a;i>=b;i--)
#define it set::iterator
#define db double
using
namespace
std;
il int
read()
while(c>='
0'&&c<='9')
return x*y;
}const
int n=1e5+10
;int
n,m;
struct
node
inline
bool
operator
};set
q;inline it split(
intp)
inline
void assign(int l,int r,int
w)il
void sol1(int l,intr)}
il int sol2(int l,int
r)
return
ret;
}il
int sol3(int l,int
r)
return
ret;
}int
main()
}else
}//print();
go(i,1
,m)
return0;
}
$cf343d\ water\ tree$
珂朵莉的約數
珂朵莉給你乙個長為n的序列,有m次查詢 每次查詢給兩個數l,r 設s為區間 l,r 內所有數的乘積 求s的約數個數mod 1000000007 輸入描述 第一行兩個正整數n,m 第二行乙個長為n的序列 之後m行每行兩個數l和r 輸出描述 對於每個詢問,輸出乙個整數表示答案 示例1輸入 複製5564 ...
校門外的樹 珂朵莉樹
題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表...
CodeForces 896C 珂朵莉樹
傳送門 用set搞的比較神奇的樹吧,玄學時間複雜度,簡潔好寫,無聊學了用來水題再好不過了 include include include include include include include include include include include include define x ...