1 #include2 #include3 #include4 #include5 #include6 #include7//#include89
using
namespace
std;
1011
**********過載運算子*************
12struct
rec13
20}g,gg;
21 ****************鍊錶************
22int
v[maxn],next[maxn],cnt;
2324
void
zou()鍊錶移動
2533}34
35void charu(int p,int
w)鍊錶插入
3642 ************棧***佇列***堆***********8
43int
main()
4465 *************並查集 ****************
66int
f[maxn];
6768
for (int a=1;a<=n;a++)
69 f[a]=a;
7071
int getf(int
now)
7276
77int merge(int p1,int
p2)78
8182
bool same(int p1,int
p2)83
86 ****************hash****************
87 maplong,int>ma;
88 map;
89 mapint>;
9091 ma[num]=ma[num]+1;92
ma[num];
93 ***************線段樹************
94 ***************遞迴**************
95int
a[maxn];
9697
int sum[maxn*4
];98
99void update(int
rt)100
103104
void build(int l,int r,int
rt)建立從l到r標號st
105111
int m=(l+r)/2
;112
//int m=(l+r)>>1;
113 build(l,m,rt*2
);建立左邊
114//
build(l,m,rt<<1);
115 build(m+1,r,rt*2+1
);建立右邊
116//
build(m+1,r,rt<<1|1);
117 ***********全部分離**********
118update(rt);填入數
119}
120 ***********
修改121
void modify(int l,int r,int rt,int p,int
v)122
128int m=(l+r)/2
;129
if (p<=m) modify(l,m,rt*2
,p,v);
130else modify(m+1,r,rt*2+1
,p,v);全部分離
131update(rt);將修改後的狀態全部改變
132}
133 ***********
求從nowl到nowr的值
134int query(int l,int r,int rt,int nowl,int
nowr)
135143
144 scanf("
%d",&n);
145for (int b=1;b<=n;b++)
146 scanf("
%d",&a[b]);
147 build(1,n,1
);148 modify(1,n,1
,p,v);
149 query(1,n,1
,nowl,nowr);
150 *****************
151notonlysuccess
152153 *******************樹狀陣列*********
154簡介:
155 對於乙個陣列求其l到r的值的和,即從l--r;利用分治(類似規定)算(2^lowbit(x)--r)+(l--r);再將2^lowbit(x)遞迴進行分解;
156 lowbit(x)是指將x轉化為2進製後,從低位到高位第1個"
1"的位置即第幾位(從0開始數)例如;lowbit(6)=1
;6的2進製為110,即2;
157 求[1,7]等價於 [7,7] + [1,6
]158 對應2^lowbit(7)--7
1--2^lowbit(7
)159 而[1,6]等價於 [4,5] + [1,4
]
160 對應 2^lowbit(4)--4
1-- 2^lowbit(4
);161
162 **************樹狀陣列*********
163 lb(x) = 2^lowbit(x)
164165
int lb(int
x)166
169170
z : 樹狀陣列
171y : 陣列
172173
void modify(int p,int
v)修改 將p位置的數改為v
174180
181int query(int
p)詢問
182188 *****************樹狀陣列偽***************
189 #include190
using
namespace
std;
191int n,m,i,num[100001],t[200001],l,r;//
num:原陣列;t:樹狀陣列
192int lowbit(int
x)193
196void change(int x,int p)//
將第x個數加p
197203
return
;204
}205
int sum(int k)//
前k個數的和
206213
return
ans;
214}
215int ask(int l,int r)//
求l-r區間和
216219
intmain()
220227
for(i=1;i<=m;i++)
228232
return0;
233}
234 *************塗色************
235for (int a=m;a>=1;a--)
236242
}243 *************分塊*****************
244int s=sqrt(n);分成塊的大小為sqrt(n);
245for (int i=1;i<=n;i++)
246 belong[i]=(i-1)/s+1
;belong[i]陣列表示第i個數所在的塊
247int cnt=belong[n];一共有幾塊
248249
for (int i=1;i<=cnt;i++)
250257
else size[i]=s;
258}
259for (int i=1;i<=n;i++)
260 sum[belong[i]]+=a[i];i所屬的那一塊的sum加上ai
261262
int query(int l,int
r)訪問
263271
while (belong[r]==belong[r+1])**從最後乙個整區間到最後
272276
for (int i=belong[l]+1;i<=belong[r]-1;i++)加入所有整區間的數
277 ans+=sum[i];
278return
ans;
279}
280281
void modify(int l,int r,int
v)修改
282289
while (belong[l]==belong[l-1
])自此往下同上訪問
290294
while (belong[r]==belong[r+1
])295
299for (int i=belong[l]+1;i<=belong[r]-1;i++)
300304 }
相信你會收穫很多**********
資料結構有關樹的知識總結(二)
哈夫曼樹的特點 權值越大,離根節點越近 樹中沒有度為1的結點,成為正則 嚴格 二叉樹 樹的帶權路徑長度 wpl 最短。應用於平常的壓縮檔案,是最基本的壓縮編碼。其原理是 如在網上傳送檔案在計算機中需要將檔案中的字元轉化成計算機語言 01語言 根據傳送的檔案中每個字元出現的頻率 即權值 構造哈夫曼樹,...
北理資料結構 行編輯
成績 10開啟時間 2017年10月10日 星期二 18 00 折扣0.8 折扣時間 2017年11月10日 星期五 23 55 允許遲交 否關閉時間 2017年11月17日 星期五 23 55 假設現在要開發乙個字元介面的編輯器,對文字的編輯操作是通過輸入乙個乙個的 行編輯命令 完成的。系統約定 ...
有關字元裝置的資料結構
1 file operations結構 include linux fs.h struct file operations 2 file結構 include linux fs.h struct file 說明 f mode 該成員表示檔案的讀寫權e限,由fmode read和fmode write標...