題目大意:需要維護乙個長度為 n 的陣列,支援在歷史版本上單點修改和單點查詢。
題解:顯然,如果直接暴力維護的話會 mle。因此,採用線段樹進行維護,使得空間複雜度由 \(o(mn)\) 降至 \(o(mlogn)\),不過相應的時間複雜度由 \(o(1)\) 上公升至 \(o(logn)\)。
**如下
#include using namespace std;
const int maxn=1e6+10;
inline int read()while(ch<'0'||ch>'9');
dowhile(ch>='0'&&ch<='9');
return f*x;
}int n,m,a[maxn];
struct nodet[maxn*20];
int tot,root[maxn],cnt;
int build(int l,int r)
int mid=l+r>>1;
ls(x)=build(l,mid),rs(x)=build(mid+1,r);
return x;
}int modify(int pre,int l,int r,int pos,int val)
int mid=l+r>>1;
if(pos<=mid)ls(x)=modify(ls(pre),l,mid,pos,val);
else rs(x)=modify(rs(pre),mid+1,r,pos,val);
return x;
}int query(int x,int l,int r,int pos)
void read_and_parse()
void solve()else }}
int main()
洛谷P3919 模板 可持久化陣列
題目大意 有兩個操作,1 在第x次操作後的版本上修改乙個值,2 查詢在第x次操作後的版本上的乙個節點的值 即 你需要維護這樣的乙個長度為n的陣列,支援如下幾種操作 1.在某個歷史版本上修改某乙個位置上的值 2.訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的...
洛谷P3919可持久化線段樹
有了可持久化陣列,便可以實現很多衍生的可持久化功能 例如 可持久化並查集 如題,你需要維護這樣的乙個長度為 n 的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的版本,不作任何改動 就會生成乙個新...
洛谷P3919 模板 可持久化陣列 主席樹
題目連線 如題,你需要維護這樣的乙個長度為n n的陣列,支援如下幾種操作 在某個歷史版本上修改某乙個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的版本,不作任何改動 就會生成乙個新的版本。版本編號即為當前操作的編號 從1開始編號,版本0表示初始...