日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】线段树题目 汇总 讲解(by not only success)

發(fā)布時間:2024/4/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】线段树题目 汇总 讲解(by not only success) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自:http://www.notonlysuccess.com/

?

非常喜歡他的代碼風(fēng)格以及簡潔的思路,感謝notonlysuccess! PS:他的個人網(wǎng)站好像是上不去了-。-

?

線段樹

很早前寫的那篇線段樹專輯至今一直是本博客閱讀點擊量最大的一片文章,當(dāng)時覺得挺自豪的,還去pku打廣告,但是現(xiàn)在我自己都不太好意思去看那篇文 章了,覺得當(dāng)時的代碼風(fēng)格實在是太丑了,很多線段樹的初學(xué)者可能就是看著這篇文章來練習(xí)的,如果不小心被我培養(yǎng)出了這么糟糕的風(fēng)格,實在是過意不去,正好 過幾天又要給集訓(xùn)隊講解線段樹,所以決定把這些題目重新寫一遍,順便把近年我接觸到的一些新題更新上去~;并且學(xué)習(xí)了splay等更高級的數(shù)據(jù)結(jié)構(gòu)后對線 段樹的體會有更深了一層,線段樹的寫法也就比以前飄逸,簡潔且方便多了.

?

?

在代碼前先介紹一些我的線段樹風(fēng)格:

?

maxn是題目給的最大區(qū)間,而節(jié)點數(shù)要開4倍,確切的來說節(jié)點數(shù)要開大于maxn的最小2x的兩倍

lson和rson分辨表示結(jié)點的左兒子和右兒子,由于每次傳參數(shù)的時候都固定是這幾個變量,所以可以用預(yù)定于比較方便的表示

以前的寫法是另外開兩個個數(shù)組記錄每個結(jié)點所表示的區(qū)間,其實這個區(qū)間不必保存,一邊算一邊傳下去就行,只需要寫函數(shù)的時候多兩個參數(shù),結(jié)合lson和rson的預(yù)定義可以很方便

PushUP(int rt)是把當(dāng)前結(jié)點的信息更新到父結(jié)點

PushDown(int rt)是把當(dāng)前結(jié)點的信息更新給兒子結(jié)點

rt表示當(dāng)前子樹的根(root),也就是當(dāng)前所在的結(jié)點

整理這些題目后我覺得線段樹的題目整體上可以分成以下四個部分:

?

單點更新:最最基礎(chǔ)的線段樹,只更新葉子節(jié)點,然后把信息用PushUP(int r)這個函數(shù)更新上來

?

hdu1166 敵兵布陣

題意:O(-1)

思路:O(-1)

線段樹功能:update:單點增減 query:區(qū)間求和

?

1 #include <cstdio> 2 3 #define lson l , m , rt << 1 4 #define rson m + 1 , r , rt << 1 | 1 5 const int maxn = 55555; 6 int sum[maxn<<2]; 7 void PushUP(int rt) { 8 sum[rt] = sum[rt<<1] + sum[rt<<1|1]; 9 } 10 void build(int l,int r,int rt) { 11 if (l == r) { 12 scanf("%d",&sum[rt]); 13 return ; 14 } 15 int m = (l + r) >> 1; 16 build(lson); 17 build(rson); 18 PushUP(rt); 19 } 20 void update(int p,int add,int l,int r,int rt) { 21 if (l == r) { 22 sum[rt] += add; 23 return ; 24 } 25 int m = (l + r) >> 1; 26 if (p <= m) update(p , add , lson); 27 else update(p , add , rson); 28 PushUP(rt); 29 } 30 int query(int L,int R,int l,int r,int rt) { 31 if (L <= l && r <= R) { 32 return sum[rt]; 33 } 34 int m = (l + r) >> 1; 35 int ret = 0; 36 if (L <= m) ret += query(L , R , lson); 37 if (R > m) ret += query(L , R , rson); 38 return ret; 39 } 40 int main() { 41 int T , n; 42 scanf("%d",&T); 43 for (int cas = 1 ; cas <= T ; cas ++) { 44 printf("Case %d:\n",cas); 45 scanf("%d",&n); 46 build(1 , n , 1); 47 char op[10]; 48 while (scanf("%s",op)) { 49 if (op[0] == 'E') break; 50 int a , b; 51 scanf("%d%d",&a,&b); 52 if (op[0] == 'Q') printf("%d\n",query(a , b , 1 , n , 1)); 53 else if (op[0] == 'S') update(a , -b , 1 , n , 1); 54 else update(a , b , 1 , n , 1); 55 } 56 } 57 return 0; 58 } View Code

?

hdu1754 I Hate It

題意:O(-1)

思路:O(-1)

線段樹功能:update:單點替換 query:區(qū)間最值

?

1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 const int maxn = 222222; 8 int MAX[maxn<<2]; 9 void PushUP(int rt) { 10 MAX[rt] = max(MAX[rt<<1] , MAX[rt<<1|1]); 11 } 12 void build(int l,int r,int rt) { 13 if (l == r) { 14 scanf("%d",&MAX[rt]); 15 return ; 16 } 17 int m = (l + r) >> 1; 18 build(lson); 19 build(rson); 20 PushUP(rt); 21 } 22 void update(int p,int sc,int l,int r,int rt) { 23 if (l == r) { 24 MAX[rt] = sc; 25 return ; 26 } 27 int m = (l + r) >> 1; 28 if (p <= m) update(p , sc , lson); 29 else update(p , sc , rson); 30 PushUP(rt); 31 } 32 int query(int L,int R,int l,int r,int rt) { 33 if (L <= l && r <= R) { 34 return MAX[rt]; 35 } 36 int m = (l + r) >> 1; 37 int ret = 0; 38 if (L <= m) ret = max(ret , query(L , R , lson)); 39 if (R > m) ret = max(ret , query(L , R , rson)); 40 return ret; 41 } 42 int main() { 43 int n , m; 44 while (~scanf("%d%d",&n,&m)) { 45 build(1 , n , 1); 46 while (m --) { 47 char op[2]; 48 int a , b; 49 scanf("%s%d%d",op,&a,&b); 50 if (op[0] == 'Q') printf("%d\n",query(a , b , 1 , n , 1)); 51 else update(a , b , 1 , n , 1); 52 } 53 } 54 return 0; 55 } View Code

?

hdu1394 Minimum Inversion Number

題意:求Inversion后的最小逆序數(shù)

思路:用O(nlogn)復(fù)雜度求出最初逆序數(shù)后,就可以用O(1)的復(fù)雜度分別遞推出其他解

線段樹功能:update:單點增減 query:區(qū)間求和

?

1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 const int maxn = 5555; 8 int sum[maxn<<2]; 9 void PushUP(int rt) { 10 sum[rt] = sum[rt<<1] + sum[rt<<1|1]; 11 } 12 void build(int l,int r,int rt) { 13 sum[rt] = 0; 14 if (l == r) return ; 15 int m = (l + r) >> 1; 16 build(lson); 17 build(rson); 18 } 19 void update(int p,int l,int r,int rt) { 20 if (l == r) { 21 sum[rt] ++; 22 return ; 23 } 24 int m = (l + r) >> 1; 25 if (p <= m) update(p , lson); 26 else update(p , rson); 27 PushUP(rt); 28 } 29 int query(int L,int R,int l,int r,int rt) { 30 if (L <= l && r <= R) { 31 return sum[rt]; 32 } 33 int m = (l + r) >> 1; 34 int ret = 0; 35 if (L <= m) ret += query(L , R , lson); 36 if (R > m) ret += query(L , R , rson); 37 return ret; 38 } 39 int x[maxn]; 40 int main() { 41 int n; 42 while (~scanf("%d",&n)) { 43 build(0 , n - 1 , 1); 44 int sum = 0; 45 for (int i = 0 ; i < n ; i ++) { 46 scanf("%d",&x[i]); 47 sum += query(x[i] , n - 1 , 0 , n - 1 , 1); 48 update(x[i] , 0 , n - 1 , 1); 49 } 50 int ret = sum; 51 for (int i = 0 ; i < n ; i ++) { 52 sum += n - x[i] - x[i] - 1; 53 ret = min(ret , sum); 54 } 55 printf("%d\n",ret); 56 } 57 return 0; 58 } View Code

?

hdu2795 Billboard

題意:h*w的木板,放進一些1*L的物品,求每次放空間能容納且最上邊的位子

思路:每次找到最大值的位子,然后減去L

線段樹功能:query:區(qū)間求最大值的位子(直接把update的操作在query里做了)

?

1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 const int maxn = 222222; 8 int h , w , n; 9 int MAX[maxn<<2]; 10 void PushUP(int rt) { 11 MAX[rt] = max(MAX[rt<<1] , MAX[rt<<1|1]); 12 } 13 void build(int l,int r,int rt) { 14 MAX[rt] = w; 15 if (l == r) return ; 16 int m = (l + r) >> 1; 17 build(lson); 18 build(rson); 19 } 20 int query(int x,int l,int r,int rt) { 21 if (l == r) { 22 MAX[rt] -= x; 23 return l; 24 } 25 int m = (l + r) >> 1; 26 int ret = (MAX[rt<<1] >= x) ? query(x , lson) : query(x , rson); 27 PushUP(rt); 28 return ret; 29 } 30 int main() { 31 while (~scanf("%d%d%d",&h,&w,&n)) { 32 if (h > n) h = n; 33 build(1 , h , 1); 34 while (n --) { 35 int x; 36 scanf("%d",&x); 37 if (MAX[1] < x) puts("-1"); 38 else printf("%d\n",query(x , 1 , h , 1)); 39 } 40 } 41 return 0; 42 } View Code

?

練習(xí):

  • poj2828 Buy Tickets
  • poj2886 Who Gets the Most Candies?

成段更新(通常這對初學(xué)者來說是一道坎),需要用到延遲標(biāo)記(或者說懶惰標(biāo)記),簡單來說就是每次更新的時候不要更新到底,用延遲標(biāo)記使得更新延遲到下次需要更新or詢問到的時候

?

hdu1698 Just a Hook

題意:O(-1)

思路:O(-1)

線段樹功能:update:成段替換 (由于只query一次總區(qū)間,所以可以直接輸出1結(jié)點的信息)

?

1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 const int maxn = 111111; 8 int h , w , n; 9 int col[maxn<<2]; 10 int sum[maxn<<2]; 11 void PushUp(int rt) { 12 sum[rt] = sum[rt<<1] + sum[rt<<1|1]; 13 } 14 void PushDown(int rt,int m) { 15 if (col[rt]) { 16 col[rt<<1] = col[rt<<1|1] = col[rt]; 17 sum[rt<<1] = (m - (m >> 1)) * col[rt]; 18 sum[rt<<1|1] = (m >> 1) * col[rt]; 19 col[rt] = 0; 20 } 21 } 22 void build(int l,int r,int rt) { 23 col[rt] = 0; 24 sum[rt] = 1; 25 if (l == r) return ; 26 int m = (l + r) >> 1; 27 build(lson); 28 build(rson); 29 PushUp(rt); 30 } 31 void update(int L,int R,int c,int l,int r,int rt) { 32 if (L <= l && r <= R) { 33 col[rt] = c; 34 sum[rt] = c * (r - l + 1); 35 return ; 36 } 37 PushDown(rt , r - l + 1); 38 int m = (l + r) >> 1; 39 if (L <= m) update(L , R , c , lson); 40 if (R > m) update(L , R , c , rson); 41 PushUp(rt); 42 } 43 int main() { 44 int T , n , m; 45 scanf("%d",&T); 46 for (int cas = 1 ; cas <= T ; cas ++) { 47 scanf("%d%d",&n,&m); 48 build(1 , n , 1); 49 while (m --) { 50 int a , b , c; 51 scanf("%d%d%d",&a,&b,&c); 52 update(a , b , c , 1 , n , 1); 53 } 54 printf("Case %d: The total value of the hook is %d.\n",cas , sum[1]); 55 } 56 return 0; 57 } View Code

?

poj3468 A Simple Problem with Integers

題意:O(-1)

思路:O(-1)

線段樹功能:update:成段增減 query:區(qū)間求和

?

1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 #define LL long long 8 const int maxn = 111111; 9 LL add[maxn<<2]; 10 LL sum[maxn<<2]; 11 void PushUp(int rt) { 12 sum[rt] = sum[rt<<1] + sum[rt<<1|1]; 13 } 14 void PushDown(int rt,int m) { 15 if (add[rt]) { 16 add[rt<<1] += add[rt]; 17 add[rt<<1|1] += add[rt]; 18 sum[rt<<1] += add[rt] * (m - (m >> 1)); 19 sum[rt<<1|1] += add[rt] * (m >> 1); 20 add[rt] = 0; 21 } 22 } 23 void build(int l,int r,int rt) { 24 add[rt] = 0; 25 if (l == r) { 26 scanf("%lld",&sum[rt]); 27 return ; 28 } 29 int m = (l + r) >> 1; 30 build(lson); 31 build(rson); 32 PushUp(rt); 33 } 34 void update(int L,int R,int c,int l,int r,int rt) { 35 if (L <= l && r <= R) { 36 add[rt] += c; 37 sum[rt] += (LL)c * (r - l + 1); 38 return ; 39 } 40 PushDown(rt , r - l + 1); 41 int m = (l + r) >> 1; 42 if (L <= m) update(L , R , c , lson); 43 if (m < R) update(L , R , c , rson); 44 PushUp(rt); 45 } 46 LL query(int L,int R,int l,int r,int rt) { 47 if (L <= l && r <= R) { 48 return sum[rt]; 49 } 50 PushDown(rt , r - l + 1); 51 int m = (l + r) >> 1; 52 LL ret = 0; 53 if (L <= m) ret += query(L , R , lson); 54 if (m < R) ret += query(L , R , rson); 55 return ret; 56 } 57 int main() { 58 int N , Q; 59 scanf("%d%d",&N,&Q); 60 build(1 , N , 1); 61 while (Q --) { 62 char op[2]; 63 int a , b , c; 64 scanf("%s",op); 65 if (op[0] == 'Q') { 66 scanf("%d%d",&a,&b); 67 printf("%lld\n",query(a , b , 1 , N , 1)); 68 } else { 69 scanf("%d%d%d",&a,&b,&c); 70 update(a , b , c , 1 , N , 1); 71 } 72 } 73 return 0; 74 } View Code

?

poj2528 Mayor’s posters

題意:在墻上貼海報,海報可以互相覆蓋,問最后可以看見幾張海報

思路:這題數(shù)據(jù)范圍很大,直接搞超時+超內(nèi)存,需要離散化:

離散化簡單的來說就是只取我們需要的值來用,比如說區(qū)間[1000,2000],[1990,2012] 我們用不到[-∞,999][1001,1989][1991,1999][2001,2011][2013,+∞]這些值,所以我只需要 1000,1990,2000,2012就夠了,將其分別映射到0,1,2,3,在于復(fù)雜度就大大的降下來了

所以離散化要保存所有需要用到的值,排序后,分別映射到1~n,這樣復(fù)雜度就會小很多很多

而這題的難點在于每個數(shù)字其實表示的是一個單位長度(并且一個點),這樣普通的離散化會造成許多錯誤(包括我以前的代碼,poj這題數(shù)據(jù)奇弱)

給出下面兩個簡單的例子應(yīng)該能體現(xiàn)普通離散化的缺陷:

1-10 1-4 5-10

1-10 1-4 6-10

為了解決這種缺陷,我們可以在排序后的數(shù)組上加些處理,比如說[1,2,6,10]

如果相鄰數(shù)字間距大于1的話,在其中加上任意一個數(shù)字,比如加成[1,2,3,6,7,10],然后再做線段樹就好了.

線段樹功能:update:成段替換 query:簡單hash

?

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 8 const int maxn = 11111; 9 bool hash[maxn]; 10 int li[maxn] , ri[maxn]; 11 int X[maxn*3]; 12 int col[maxn<<4]; 13 int cnt; 14 15 void PushDown(int rt) { 16 if (col[rt] != -1) { 17 col[rt<<1] = col[rt<<1|1] = col[rt]; 18 col[rt] = -1; 19 } 20 } 21 void update(int L,int R,int c,int l,int r,int rt) { 22 if (L <= l && r <= R) { 23 col[rt] = c; 24 return ; 25 } 26 PushDown(rt); 27 int m = (l + r) >> 1; 28 if (L <= m) update(L , R , c , lson); 29 if (m < R) update(L , R , c , rson); 30 } 31 void query(int l,int r,int rt) { 32 if (col[rt] != -1) { 33 if (!hash[col[rt]]) cnt ++; 34 hash[ col[rt] ] = true; 35 return ; 36 } 37 if (l == r) return ; 38 int m = (l + r) >> 1; 39 query(lson); 40 query(rson); 41 } 42 int Bin(int key,int n,int X[]) { 43 int l = 0 , r = n - 1; 44 while (l <= r) { 45 int m = (l + r) >> 1; 46 if (X[m] == key) return m; 47 if (X[m] < key) l = m + 1; 48 else r = m - 1; 49 } 50 return -1; 51 } 52 int main() { 53 int T , n; 54 scanf("%d",&T); 55 while (T --) { 56 scanf("%d",&n); 57 int nn = 0; 58 for (int i = 0 ; i < n ; i ++) { 59 scanf("%d%d",&li[i] , &ri[i]); 60 X[nn++] = li[i]; 61 X[nn++] = ri[i]; 62 } 63 sort(X , X + nn); 64 int m = 1; 65 for (int i = 1 ; i < nn; i ++) { 66 if (X[i] != X[i-1]) X[m ++] = X[i]; 67 } 68 for (int i = m - 1 ; i > 0 ; i --) { 69 if (X[i] != X[i-1] + 1) X[m ++] = X[i-1] + 1; 70 } 71 sort(X , X + m); 72 memset(col , -1 , sizeof(col)); 73 for (int i = 0 ; i < n ; i ++) { 74 int l = Bin(li[i] , m , X); 75 int r = Bin(ri[i] , m , X); 76 update(l , r , i , 0 , m , 1); 77 } 78 cnt = 0; 79 memset(hash , false , sizeof(hash)); 80 query(0 , m , 1); 81 printf("%d\n",cnt); 82 } 83 return 0; 84 } View Code

?

poj3225 Help with Intervals

題意:區(qū)間操作,交,并,補等

思路:

我們一個一個操作來分析:(用0和1表示是否包含區(qū)間,-1表示該區(qū)間內(nèi)既有包含又有不包含)

U:把區(qū)間[l,r]覆蓋成1

I:把[-∞,l)(r,∞]覆蓋成0

D:把區(qū)間[l,r]覆蓋成0

C:把[-∞,l)(r,∞]覆蓋成0 , 且[l,r]區(qū)間0/1互換

S:[l,r]區(qū)間0/1互換

?

成段覆蓋的操作很簡單,比較特殊的就是區(qū)間0/1互換這個操作,我們可以稱之為異或操作

很明顯我們可以知道這個性質(zhì):當(dāng)一個區(qū)間被覆蓋后,不管之前有沒有異或標(biāo)記都沒有意義了

所以當(dāng)一個節(jié)點得到覆蓋標(biāo)記時把異或標(biāo)記清空

而當(dāng)一個節(jié)點得到異或標(biāo)記的時候,先判斷覆蓋標(biāo)記,如果是0或1,直接改變一下覆蓋標(biāo)記,不然的話改變異或標(biāo)記

?

開區(qū)間閉區(qū)間只要數(shù)字乘以2就可以處理(偶數(shù)表示端點,奇數(shù)表示兩端點間的區(qū)間)

線段樹功能:update:成段替換,區(qū)間異或 query:簡單hash

?

1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <algorithm> 5 using namespace std; 6 #define lson l , m , rt << 1 7 #define rson m + 1 , r , rt << 1 | 1 8 9 const int maxn = 131072; 10 bool hash[maxn]; 11 int cover[maxn<<2]; 12 int XOR[maxn<<2]; 13 void FXOR(int rt) { 14 if (cover[rt] != -1) cover[rt] ^= 1; 15 else XOR[rt] ^= 1; 16 } 17 void PushDown(int rt) { 18 if (cover[rt] != -1) { 19 cover[rt<<1] = cover[rt<<1|1] = cover[rt]; 20 XOR[rt<<1] = XOR[rt<<1|1] = 0; 21 cover[rt] = -1; 22 } 23 if (XOR[rt]) { 24 FXOR(rt<<1); 25 FXOR(rt<<1|1); 26 XOR[rt] = 0; 27 } 28 } 29 void update(char op,int L,int R,int l,int r,int rt) { 30 if (L <= l && r <= R) { 31 if (op == 'U') { 32 cover[rt] = 1; 33 XOR[rt] = 0; 34 } else if (op == 'D') { 35 cover[rt] = 0; 36 XOR[rt] = 0; 37 } else if (op == 'C' || op == 'S') { 38 FXOR(rt); 39 } 40 return ; 41 } 42 PushDown(rt); 43 int m = (l + r) >> 1; 44 if (L <= m) update(op , L , R , lson); 45 else if (op == 'I' || op == 'C') { 46 XOR[rt<<1] = cover[rt<<1] = 0; 47 } 48 if (m < R) update(op , L , R , rson); 49 else if (op == 'I' || op == 'C') { 50 XOR[rt<<1|1] = cover[rt<<1|1] = 0; 51 } 52 } 53 void query(int l,int r,int rt) { 54 if (cover[rt] == 1) { 55 for (int it = l ; it <= r ; it ++) { 56 hash[it] = true; 57 } 58 return ; 59 } else if (cover[rt] == 0) return ; 60 if (l == r) return ; 61 PushDown(rt); 62 int m = (l + r) >> 1; 63 query(lson); 64 query(rson); 65 } 66 int main() { 67 cover[1] = XOR[1] = 0; 68 char op , l , r; 69 int a , b; 70 while ( ~scanf("%c %c%d,%d%c\n",&op , &l , &a , &b , &r) ) { 71 a <<= 1 , b <<= 1; 72 if (l == '(') a ++; 73 if (r == ')') b --; 74 if (a > b) { 75 if (op == 'C' || op == 'I') { 76 cover[1] = XOR[1] = 0; 77 } 78 } else update(op , a , b , 0 , maxn , 1); 79 } 80 query(0 , maxn , 1); 81 bool flag = false; 82 int s = -1 , e; 83 for (int i = 0 ; i <= maxn ; i ++) { 84 if (hash[i]) { 85 if (s == -1) s = i; 86 e = i; 87 } else { 88 if (s != -1) { 89 if (flag) printf(" "); 90 flag = true; 91 printf("%c%d,%d%c",s&1?'(':'[' , s>>1 , (e+1)>>1 , e&1?')':']'); 92 s = -1; 93 } 94 } 95 } 96 if (!flag) printf("empty set"); 97 puts(""); 98 return 0; 99 } View Code

?

練習(xí):

  • poj1436 Horizontally Visible Segments
  • poj2991 Crane
  • Another LCIS
  • Bracket Sequence

區(qū)間合并

這類題目會詢問區(qū)間中滿足條件的連續(xù)最長區(qū)間,所以PushUp的時候需要對左右兒子的區(qū)間進行合并

?

poj3667 Hotel

題意:1 a:詢問是不是有連續(xù)長度為a的空房間,有的話住進最左邊

2 a b:將[a,a+b-1]的房間清空

思路:記錄區(qū)間中最長的空房間

線段樹操作:update:區(qū)間替換 query:詢問滿足條件的最左斷點

?

1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <algorithm> 5 using namespace std; 6 #define lson l , m , rt << 1 7 #define rson m + 1 , r , rt << 1 | 1 8 9 const int maxn = 55555; 10 int lsum[maxn<<2] , rsum[maxn<<2] , msum[maxn<<2]; 11 int cover[maxn<<2]; 12 13 void PushDown(int rt,int m) { 14 if (cover[rt] != -1) { 15 cover[rt<<1] = cover[rt<<1|1] = cover[rt]; 16 msum[rt<<1] = lsum[rt<<1] = rsum[rt<<1] = cover[rt] ? 0 : m - (m >> 1); 17 msum[rt<<1|1] = lsum[rt<<1|1] = rsum[rt<<1|1] = cover[rt] ? 0 : (m >> 1); 18 cover[rt] = -1; 19 } 20 } 21 void PushUp(int rt,int m) { 22 lsum[rt] = lsum[rt<<1]; 23 rsum[rt] = rsum[rt<<1|1]; 24 if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1]; 25 if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1]; 26 msum[rt] = max(lsum[rt<<1|1] + rsum[rt<<1] , max(msum[rt<<1] , msum[rt<<1|1])); 27 } 28 void build(int l,int r,int rt) { 29 msum[rt] = lsum[rt] = rsum[rt] = r - l + 1; 30 cover[rt] = -1; 31 if (l == r) return ; 32 int m = (l + r) >> 1; 33 build(lson); 34 build(rson); 35 } 36 void update(int L,int R,int c,int l,int r,int rt) { 37 if (L <= l && r <= R) { 38 msum[rt] = lsum[rt] = rsum[rt] = c ? 0 : r - l + 1; 39 cover[rt] = c; 40 return ; 41 } 42 PushDown(rt , r - l + 1); 43 int m = (l + r) >> 1; 44 if (L <= m) update(L , R , c , lson); 45 if (m < R) update(L , R , c , rson); 46 PushUp(rt , r - l + 1); 47 } 48 int query(int w,int l,int r,int rt) { 49 if (l == r) return l; 50 PushDown(rt , r - l + 1); 51 int m = (l + r) >> 1; 52 if (msum[rt<<1] >= w) return query(w , lson); 53 else if (rsum[rt<<1] + lsum[rt<<1|1] >= w) return m - rsum[rt<<1] + 1; 54 return query(w , rson); 55 } 56 int main() { 57 int n , m; 58 scanf("%d%d",&n,&m); 59 build(1 , n , 1); 60 while (m --) { 61 int op , a , b; 62 scanf("%d",&op); 63 if (op == 1) { 64 scanf("%d",&a); 65 if (msum[1] < a) puts("0"); 66 else { 67 int p = query(a , 1 , n , 1); 68 printf("%d\n",p); 69 update(p , p + a - 1 , 1 , 1 , n , 1); 70 } 71 } else { 72 scanf("%d%d",&a,&b); 73 update(a , a + b - 1 , 0 , 1 , n , 1); 74 } 75 } 76 return 0; 77 } View Code

?

練習(xí):

  • hdu3308 LCIS
  • hdu3397 Sequence operation
  • hdu2871 Memory Control
  • hdu1540 Tunnel Warfare
  • CF46-D Parking Lot

掃描線

這類題目需要將一些操作排序,然后從左到右用一根掃描線(當(dāng)然是在我們腦子里)掃過去

最典型的就是矩形面積并,周長并等題

?

hdu1542 Atlantis

題意:矩形面積并

思路:浮點數(shù)先要離散化;然后把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然后從下到上掃描上去,用cnt表示該區(qū)間下邊比上邊多幾個

線段樹操作:update:區(qū)間增減 query:直接取根節(jié)點的值

?

1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <algorithm> 5 using namespace std; 6 #define lson l , m , rt << 1 7 #define rson m + 1 , r , rt << 1 | 1 8 9 const int maxn = 2222; 10 int cnt[maxn << 2]; 11 double sum[maxn << 2]; 12 double X[maxn]; 13 struct Seg { 14 double h , l , r; 15 int s; 16 Seg(){} 17 Seg(double a,double b,double c,int d) : l(a) , r(b) , h(c) , s(d) {} 18 bool operator < (const Seg &cmp) const { 19 return h < cmp.h; 20 } 21 }ss[maxn]; 22 void PushUp(int rt,int l,int r) { 23 if (cnt[rt]) sum[rt] = X[r+1] - X[l]; 24 else if (l == r) sum[rt] = 0; 25 else sum[rt] = sum[rt<<1] + sum[rt<<1|1]; 26 } 27 void update(int L,int R,int c,int l,int r,int rt) { 28 if (L <= l && r <= R) { 29 cnt[rt] += c; 30 PushUp(rt , l , r); 31 return ; 32 } 33 int m = (l + r) >> 1; 34 if (L <= m) update(L , R , c , lson); 35 if (m < R) update(L , R , c , rson); 36 PushUp(rt , l , r); 37 } 38 int Bin(double key,int n,double X[]) { 39 int l = 0 , r = n - 1; 40 while (l <= r) { 41 int m = (l + r) >> 1; 42 if (X[m] == key) return m; 43 if (X[m] < key) l = m + 1; 44 else r = m - 1; 45 } 46 return -1; 47 } 48 int main() { 49 int n , cas = 1; 50 while (~scanf("%d",&n) && n) { 51 int m = 0; 52 while (n --) { 53 double a , b , c , d; 54 scanf("%lf%lf%lf%lf",&a,&b,&c,&d); 55 X[m] = a; 56 ss[m++] = Seg(a , c , b , 1); 57 X[m] = c; 58 ss[m++] = Seg(a , c , d , -1); 59 } 60 sort(X , X + m); 61 sort(ss , ss + m); 62 int k = 1; 63 for (int i = 1 ; i < m ; i ++) { 64 if (X[i] != X[i-1]) X[k++] = X[i]; 65 } 66 memset(cnt , 0 , sizeof(cnt)); 67 memset(sum , 0 , sizeof(sum)); 68 double ret = 0; 69 for (int i = 0 ; i < m - 1 ; i ++) { 70 int l = Bin(ss[i].l , k , X); 71 int r = Bin(ss[i].r , k , X) - 1; 72 if (l <= r) update(l , r , ss[i].s , 0 , k - 1, 1); 73 ret += sum[1] * (ss[i+1].h - ss[i].h); 74 } 75 printf("Test case #%d\nTotal explored area: %.2lf\n\n",cas++ , ret); 76 } 77 return 0; 78 } View Code

?

hdu1828 Picture

題意:矩形周長并

思路:與面積不同的地方是還要記錄豎的邊有幾個(numseg記錄),并且當(dāng)邊界重合的時候需要合并(用lbd和rbd表示邊界來輔助)

線段樹操作:update:區(qū)間增減 query:直接取根節(jié)點的值

?

1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <algorithm> 5 using namespace std; 6 #define lson l , m , rt << 1 7 #define rson m + 1 , r , rt << 1 | 1 8 9 const int maxn = 22222; 10 struct Seg{ 11 int l , r , h , s; 12 Seg() {} 13 Seg(int a,int b,int c,int d):l(a) , r(b) , h(c) , s(d) {} 14 bool operator < (const Seg &cmp) const { 15 if (h == cmp.h) return s > cmp.s; 16 return h < cmp.h; 17 } 18 }ss[maxn]; 19 bool lbd[maxn<<2] , rbd[maxn<<2]; 20 int numseg[maxn<<2]; 21 int cnt[maxn<<2]; 22 int len[maxn<<2]; 23 void PushUP(int rt,int l,int r) { 24 if (cnt[rt]) { 25 lbd[rt] = rbd[rt] = 1; 26 len[rt] = r - l + 1; 27 numseg[rt] = 2; 28 } else if (l == r) { 29 len[rt] = numseg[rt] = lbd[rt] = rbd[rt] = 0; 30 } else { 31 lbd[rt] = lbd[rt<<1]; 32 rbd[rt] = rbd[rt<<1|1]; 33 len[rt] = len[rt<<1] + len[rt<<1|1]; 34 numseg[rt] = numseg[rt<<1] + numseg[rt<<1|1]; 35 if (lbd[rt<<1|1] && rbd[rt<<1]) numseg[rt] -= 2;//兩條線重合 36 } 37 } 38 void update(int L,int R,int c,int l,int r,int rt) { 39 if (L <= l && r <= R) { 40 cnt[rt] += c; 41 PushUP(rt , l , r); 42 return ; 43 } 44 int m = (l + r) >> 1; 45 if (L <= m) update(L , R , c , lson); 46 if (m < R) update(L , R , c , rson); 47 PushUP(rt , l , r); 48 } 49 int main() { 50 int n; 51 while (~scanf("%d",&n)) { 52 int m = 0; 53 int lbd = 10000, rbd = -10000; 54 for (int i = 0 ; i < n ; i ++) { 55 int a , b , c , d; 56 scanf("%d%d%d%d",&a,&b,&c,&d); 57 lbd = min(lbd , a); 58 rbd = max(rbd , c); 59 ss[m++] = Seg(a , c , b , 1); 60 ss[m++] = Seg(a , c , d , -1); 61 } 62 sort(ss , ss + m); 63 int ret = 0 , last = 0; 64 for (int i = 0 ; i < m ; i ++) { 65 if (ss[i].l < ss[i].r) update(ss[i].l , ss[i].r - 1 , ss[i].s , lbd , rbd - 1 , 1); 66 ret += numseg[1] * (ss[i+1].h - ss[i].h); 67 ret += abs(len[1] - last); 68 last = len[1]; 69 } 70 printf("%d\n",ret); 71 } 72 return 0; 73 } View Code

?

    練習(xí)

    • hdu3265 Posters
      hdu3642 Get The Treasury
      poj2482 Stars in Your Window
      poj2464 Brownie Points II
      hdu3255 Farming?
      ural1707 Hypnotoad’s Secret
      uva11983 Weird Advertisement

?

?

線段樹與其他結(jié)合練習(xí)(歡迎大家補充):

  • hdu3954 Level up
  • hdu4027 Can you answer these queries?
  • hdu3333 Turing Tree
  • hdu3874 Necklace
  • hdu3016 Man Down
  • hdu3340 Rain in ACStar
  • zju3511 Cake Robbery
  • UESTC1558 Charitable Exchange
  • CF85-D Sum of Medians
  • spojGSS2 Can you answer these queries II

轉(zhuǎn)載于:https://www.cnblogs.com/Silence-AC/p/3880067.html

總結(jié)

以上是生活随笔為你收集整理的【转】线段树题目 汇总 讲解(by not only success)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久久精品这里都是精品 | 久久这里只有精品1 | 500部大龄熟乱视频 欧美日本三级 | 日韩欧美国产激情在线播放 | 国产日韩欧美网站 | 不卡的av在线 | 久久久伊人网 | 日韩精品免费在线视频 | 色欧美88888久久久久久影院 | 91成人欧美| 黄色av电影| 激情av网 | 亚洲精品国产精品国自产观看浪潮 | 在线成人短视频 | 国产免费亚洲高清 | 狠狠天天 | 亚洲精品1区2区3区 超碰成人网 | 成人动态视频 | 日韩 在线观看 | 亚洲 精品在线视频 | 二区视频在线 | 久久国产精品一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 久久精品综合一区 | 欧美专区日韩专区 | 美女中文字幕 | 欧美极品少妇xxxx | 久久久穴 | 国产高清视频免费在线观看 | 日韩 精品 一区 国产 麻豆 | 波多野结衣视频一区二区三区 | 激情av在线资源 | wwwwww黄| 国产韩国日本高清视频 | 日韩在线视频不卡 | 亚洲视频 中文字幕 | 国产91欧美 | 国产人成免费视频 | 久久99久| 欧美性色黄 | 激情在线网址 | 麻豆传媒在线免费看 | 亚洲第一久久久 | 亚洲每日更新 | 深夜免费福利视频 | 久射网| 婷婷丁香色| 黄色一及电影 | 99性视频 | 国产精品你懂的在线观看 | 九九九九色 | 天堂网av 在线 | 亚洲欧美国产精品18p | 九九九在线观看视频 | 五月丁香 | 国产手机av在线 | 在线成人中文字幕 | h视频日本| 国产丝袜高跟 | 亚洲精品国偷拍自产在线观看 | 在线午夜av | 国产精品二区三区 | 久久视频6 | 91亚洲精品在线 | 日韩影视大全 | 精品中文字幕在线观看 | 国产精品久久久久影视 | 欧美日韩精品国产 | 国产精品久久久久一区二区 | 久久综合五月婷婷 | 在线av资源 | 国产精品国产三级国产aⅴ入口 | 色在线视频网 | 中国一级片在线 | 一区二区三区免费在线 | 久草免费在线观看视频 | 成片免费观看视频大全 | 中文av影院 | 日韩黄色中文字幕 | 日韩在线高清 | 久久免费视频在线观看6 | 日本女人的性生活视频 | 在线观看av免费 | 一区二区伦理电影 | 国产人免费人成免费视频 | 黄av免费 | 五月综合婷 | 亚洲综合色网站 | 久久精品网站免费观看 | 操操日日 | 精品99在线视频 | 久久论理 | 青草草在线视频 | 日韩免费观看一区二区三区 | 国产成a人亚洲精v品在线观看 | 一区二区中文字幕在线播放 | 中文字幕高清有码 | 久久五月婷婷丁香 | 国偷自产中文字幕亚洲手机在线 | 黄色三级免费 | 五月激情久久久 | 日韩 国产| 91看片淫黄大片91 | 91成人观看 | 国产色网站 | 性色av免费在线观看 | 国产一级淫片免费看 | 超碰97人 | 日本特黄一级片 | 欧美成人aa | 亚洲狠狠操 | 日韩在线免费电影 | 操操操天天操 | 亚洲午夜大片 | 我要看黄色一级片 | 美女在线免费观看视频 | 五月婷婷影院 | 久久激情视频免费观看 | 成人aⅴ视频 | 91天天操| 天天干,天天射,天天操,天天摸 | 国产一区二区在线免费播放 | 国产精品黄色 | 日韩精品在线看 | 99精品国产一区二区三区不卡 | 亚洲免费在线观看视频 | 精品一区 在线 | 欧美精品久久久久性色 | 在线高清一区 | 国产小视频免费观看 | 国内视频在线 | 国产99在线免费 | 欧美日韩高清一区 | 粉嫩av一区二区三区四区五区 | 久久久午夜精品理论片中文字幕 | 久久精品欧美一 | 狠狠躁日日躁夜夜躁av | 激情久久久 | 黄色1级毛片 | 国产在线视频一区二区三区 | a黄色片在线观看 | 91av资源在线 | 成人激情开心网 | 日韩一区二区久久 | 日批网站在线观看 | 天堂久色| 天天艹天天干天天 | 亚洲精品视频在线观看免费视频 | 久久久精品一区二区三区 | 欧美狠狠操| 天天干天天弄 | 欧美精品乱码久久久久久 | 精品国产自| 国产美女无遮挡永久免费 | av在线观| 日本99热| 一本—道久久a久久精品蜜桃 | 毛片基地黄久久久久久天堂 | 成片视频免费观看 | 日韩xxx视频 | 久久96国产精品久久99漫画 | 97超视频 | 一级黄色网址 | 天堂在线免费视频 | 天天av综合网 | av网在线观看 | 69精品在线观看 | 91网免费观看 | 中文字幕在线成人 | 午夜精品一区二区三区在线播放 | 人人超碰免费 | 91插插视频| 国产123区在线观看 国产精品麻豆91 | 91精品一区二区三区蜜臀 | av大全在线播放 | 国产高清在线免费视频 | 国产精品久久99 | 日韩在线视频免费观看 | 日日夜夜天天综合 | av 一区二区三区四区 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 久久久久久国产精品免费 | 六月色丁| 91视视频在线直接观看在线看网页在线看 | 国产999精品久久久 免费a网站 | 亚洲成人家庭影院 | 69久久久 | 天天操天天摸天天爽 | 国产精品久久久久久久久久99 | 婷婷网址 | 日日夜夜天天干 | 久草在线视频资源 | 在线观看片 | 亚洲精品高清在线观看 | 久久夜色精品国产欧美乱极品 | 亚洲激情综合网 | 亚州精品一二三区 | 天天综合五月天 | 国产黄色片免费看 | 亚洲一级片在线看 | 久久精品麻豆 | 91成人区| 国产 日韩 欧美 自拍 | 久久电影网站中文字幕 | 日韩欧美在线中文字幕 | 成人毛片网 | 精品91视频 | 久久精品成人热国产成 | 91夜夜夜| 99国产精品 | 97超碰资源网 | 国产在线p| 久久人91精品久久久久久不卡 | 国产在线观看你懂得 | 992tv又爽又黄的免费视频 | 六月丁香色婷婷 | 91av精品 | 婷婷av网站| 久草综合视频 | 视频直播国产精品 | 99免费在线播放99久久免费 | 国产精品久久久久毛片大屁完整版 | 久草在线观看视频免费 | 久久久色| 81精品国产乱码久久久久久 | 一级性视频 | 香蕉色综合 | 婷婷久月 | 成人作爱视频 | 人人干在线观看 | 日批视频国产 | 欧美福利网址 | 亚洲精品字幕在线 | 国产在线观看免费观看 | a色网站| 久久黄网站 | 日本精品久久久久中文字幕5 | 国产精品高潮在线观看 | av综合网址 | 欧美伦理电影一区二区 | 成人h在线播放 | 中文字幕在线观看完整版电影 | 久久久私人影院 | 中文字幕视频网站 | 日本黄色免费电影网站 | 国产精品久久久久久一二三四五 | 国产小视频在线 | 99热高清| 成人一级视频在线观看 | 日韩电影在线一区 | 人人草人人草 | 色婷婷亚洲婷婷 | 国产一级片播放 | 久草在线观看资源 | 黄p网站在线观看 | 免费99精品国产自在在线 | 久久人人爽人人爽人人 | 国产手机在线播放 | 美女久久精品 | 亚洲国产小视频在线观看 | 欧美一二三区在线观看 | 日韩欧美在线视频一区二区三区 | 91成人久久 | 国产福利免费看 | 国产精品一区二区 91 | 久久精品韩国 | 国产不卡一 | 伊人干综合 | 久色小说 | av一区在线 | 视频1区2区 | 日日精品 | 国产在线观看污片 | 色婷婷99| 808电影免费观看三年 | 国产亚洲一区二区三区 | 91系列在线观看 | 欧美日韩国产欧美 | 久在线观看 | 麻豆视频在线看 | 毛片网站免费 | 亚洲国产成人久久综合 | 99精品视频在线观看免费 | 久久精品视频5 | 91精品国产91久久久久福利 | 91热| 天天人人综合 | 国产精品自拍av | 麻豆视频免费观看 | 国产小视频网站 | 天天干天天拍天天操天天拍 | 色婷婷综合久久久久中文字幕1 | 天天爱天天色 | 日韩高清精品免费观看 | 丁香视频在线观看 | 成av在线| 色网站在线看 | 中文字幕在线免费看 | 久久精品九色 | 免费成视频 | 国产福利中文字幕 | 最新av网址大全 | av解说在线观看 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 亚洲日b视频 | 亚洲一级黄色av | 狠狠色伊人亚洲综合成人 | 成人小视频在线免费观看 | 又湿又紧又大又爽a视频国产 | 亚洲综合五月天 | 91亚洲精品乱码久久久久久蜜桃 | 久久精品国产v日韩v亚洲 | 欧美日韩在线观看一区二区 | 免费网站色 | 毛片a级片 | 中文字幕一区二区三区在线播放 | 国产不卡在线看 | 亚洲精品中文在线资源 | 国产成人精品久 | 一区二区三区久久 | 成人中文字幕+乱码+中文字幕 | 特级毛片爽www免费版 | 日韩 在线观看 | 国产精品久久久久高潮 | 成人av在线资源 | 国产精品a久久 | 九九热久久免费视频 | 激情久久久久 | 亚洲丁香日韩 | 在线综合色 | 久久毛片高清国产 | 久久久三级视频 | 久久久穴 | 日韩影视精品 | 久久激情电影 | www.五月天激情 | 国产精品99爱 | 久草视频资源 | 成人欧美一区二区三区在线观看 | 激情喷水 | 狠狠干2018| 亚洲精品国产精品国自 | 国产精品扒开做爽爽的视频 | 国产一区二区视频在线 | 日韩在线视频免费看 | 国产看片免费 | 国产一区久久 | 天天干天天怕 | 成人av动漫在线 | 夜夜看av | 激情婷婷久久 | 亚洲成人免费 | 日韩精品免费在线视频 | 免费看黄在线网站 | 国产精品99久久免费观看 | 91激情视频在线播放 | 91人人视频在线观看 | 日韩色一区二区三区 | 少妇搡bbbb搡bbb搡忠贞 | 中文字幕视频播放 | 免费高清在线观看成人 | 中文字幕第一页av | 日韩在线看片 | 天天操天天是 | 黄av免费 | 麻豆国产在线播放 | 中文不卡视频 | 久久婷婷五月综合色丁香 | 六月丁香在线观看 | 激情在线网站 | aaa亚洲精品一二三区 | 91最新地址永久入口 | 日韩国产精品久久 | 久久久久久久av麻豆果冻 | 成年人在线播放视频 | 日韩免费在线一区 | 91色偷偷 | 18国产精品福利片久久婷 | 亚洲精品9| 久久久99精品免费观看乱色 | 97精品电影院 | 99国产一区 | 婷婷四房综合激情五月 | av福利在线免费观看 | 亚洲精品视频在线看 | 天天激情天天干 | 特级大胆西西4444www | 久久久影片 | 日韩电影一区二区三区 | 国产在线欧美在线 | 久久五月婷婷丁香社区 | 国产v亚洲v| 九九电影在线 | 国产高清日韩欧美 | 国产精品嫩草69影院 | 日日夜夜天天久久 | 日韩黄色一级电影 | 中文字幕网站视频在线 | 在线视频欧美精品 | 国产精品久久9 | 久久久免费看片 | 亚洲精品黄网站 | 五月天丁香视频 | 久久久黄色av | 在线小视频你懂的 | 97视频资源| 日韩精品一区二区不卡 | 国产精品大片免费观看 | 久艹视频免费观看 | 亚洲精品动漫成人3d无尽在线 | 免费看三级黄色片 | 99国产精品久久久久老师 | 日韩av三区| 综合久久久| 在线有码中文字幕 | 99久久久成人国产精品 | 久久久久www | 色欧美成人精品a∨在线观看 | 欧美电影在线观看 | 中文字幕在线免费看 | 天天射天天搞 | 国产视频1| 午夜av日韩 | 亚洲a免费| 日日夜夜操av | 免费涩涩网站 | 91香蕉视频好色先生 | 狠狠干夜夜 | 久久久精品 一区二区三区 国产99视频在线观看 | 91成人小视频 | 亚洲一级电影 | av电影中文字幕在线观看 | 国产黄色片久久 | 91亚洲精品久久久蜜桃网站 | 国产麻豆精品久久 | 精品1区二区| 久久久91精品国产一区二区三区 | 中文字幕在线观看视频免费 | 国产一级二级av | 日韩综合一区二区三区 | 成人黄色免费在线观看 | 日韩精品在线视频免费观看 | 久久久久成人精品 | 日韩在线| 天天干天天射天天插 | 99久久精品久久久久久动态片 | 国产一区二区精品 | 九九综合在线 | 在线 影视 一区 | 成人久久电影 | 免费看黄在线观看 | 国产一级高清 | 国产精品视频app | 日本中文字幕在线免费观看 | 国产麻豆精品在线观看 | 午夜18视频在线观看 | 久久草网站| 国产麻豆电影 | 国产午夜精品一区二区三区在线观看 | 国产视频在线观看免费 | 久久久久久美女 | 美女久久久久久久久久久 | 久久图| 国产区精品视频 | 日韩在线视频网 | 精品欧美一区二区精品久久 | 丁香六月婷婷激情 | 久久成人国产 | 一区二区视频欧美 | 激情婷婷六月 | 久久精品视频在线看 | 久久免费毛片视频 | 久久福利剧场 | 99热在线看 | 99久久精品日本一区二区免费 | 亚洲一区二区三区毛片 | 久久激情片 | 麻豆视频国产 | 正在播放亚洲精品 | 日韩欧美高清视频在线观看 | 天天综合久久综合 | 四虎www| 狠狠干网址 | av免费观看高清 | 日韩特黄一级欧美毛片特黄 | 欧美视频网址 | 99999精品 | 黄色免费大全 | 国产亚洲精品久久久久久久久久久久 | 日韩有码欧美 | 又色又爽又黄高潮的免费视频 | 在线免费av电影 | 黄a网 | av色图天堂网 | 成人免费观看视频大全 | 黄色成人av | 九九九在线 | 国产成人三级一区二区在线观看一 | 不卡视频在线 | 久久免费国产精品1 | 精品国产亚洲一区二区麻豆 | 又黄又爽的视频在线观看网站 | 国产99久久精品一区二区永久免费 | 99视频偷窥在线精品国自产拍 | 9992tv成人免费看片 | 免费看久久 | 国产精品永久久久久久久久久 | 日本丰满少妇免费一区 | 亚洲综合在线观看视频 | 国产精品免费大片视频 | 激情综合网五月婷婷 | 97免费| 91亚洲影院 | 成人va在线观看 | 97在线看| 精品国产诱惑 | 天天色天天射天天操 | 欧洲精品码一区二区三区免费看 | 色狠狠一区二区 | 日韩在线观看视频一区二区三区 | 玖玖视频在线 | 免费韩国av | 欧美日韩高清一区二区 国产亚洲免费看 | 激情婷婷综合 | 国产91学生粉嫩喷水 | 2020天天干夜夜爽 | 香蕉视频国产在线观看 | 婷婷综合视频 | 天天综合天天综合 | 狠狠色丁香婷婷综合最新地址 | 韩国av在线 | 五月婷婷在线观看视频 | 91黄色视屏 | 91少妇精拍在线播放 | 精品麻豆入口免费 | 特黄特黄的视频 | 日韩av影视在线 | 国产精品日韩精品 | 五月天伊人 | 国产精品久久99精品毛片三a | 精品一二三区视频 | japanesexxxhd奶水| 日本系列中文字幕 | 久久电影色 | 尤物97国产精品久久精品国产 | 欧美成人69av | 99热在线这里只有精品 | 狠狠躁天天躁综合网 | av中文天堂在线 | 久久黄色片 | 超级碰99 | 久草在线视频国产 | 欧美孕交vivoestv另类 | 精品视频9999 | 黄污在线看 | 久久免费中文视频 | 久久亚洲国产精品 | 婷婷视频导航 | 天堂av在线网 | 欧美成a人片在线观看久 | 日韩高清不卡一区二区三区 | 九九国产精品视频 | 欧美色一色 | 国产剧情在线一区 | 在线观看视频日韩 | 91tv国产成人福利 | 免费日韩一区二区三区 | 天天性天天草 | 91桃花视频 | 久久香蕉国产 | 午夜精品久久久久久久99婷婷 | 在线观看亚洲精品视频 | 美女视频网 | 在线观影网站 | 久久黄色影视 | 91麻豆精品国产91 | 国产97在线观看 | 国产精品a久久 | 在线观看日韩精品视频 | 四虎影视精品成人 | 亚洲视频免费在线看 | 天天操福利视频 | 天天干,天天射,天天操,天天摸 | 日韩欧美一区二区三区黑寡妇 | 99久久www免费 | 日韩影片在线观看 | 亚洲精品美女在线观看播放 | 色永久免费视频 | 亚洲一区二区三区毛片 | 99婷婷| 国产成人精品一区二区在线 | 日日射天天射 | 91精品啪啪| 三级在线国产 | 日本一区二区高清不卡 | 久久99久久99免费视频 | 97色婷婷 | 精品久久视频 | 特级毛片网站 | 国产成人久久av977小说 | 国产视频2021| 欧美在线不卡一区 | aaa日本高清在线播放免费观看 | 久久99电影| 国产高清区 | 国产精品美女久久久久久2018 | 国产三级久久久 | 91福利国产在线观看 | 成人黄色国产 | 精品国产三级 | 欧美激情精品久久 | 欧美精品天堂 | 国产精品久久久久久吹潮天美传媒 | 久久久99精品免费观看 | 狠狠色狠狠色 | 成人97视频 | 黄色免费看片网站 | 深夜免费福利在线 | 欧美性生交大片免网 | 国产香蕉视频在线观看 | 夜夜躁日日躁 | 99中文字幕视频 | 欧美性生爱| 久久久久久黄色 | 国产免费看| 亚洲影院国产 | 播五月婷婷 | 亚洲精品国精品久久99热 | 久久久久中文 | 中文不卡视频在线 | 亚洲乱码精品久久久久 | 99久久99久久免费精品蜜臀 | 久久久久一区二区三区四区 | 久久久999精品视频 国产美女免费观看 | 成年人在线播放视频 | 国产精品系列在线 | 去看片| 国产99久久久精品 | 福利视频一区二区 | 国产成人99久久亚洲综合精品 | 久久激情视频免费观看 | 国产69精品久久久久久久久久 | 亚洲欧美乱综合图片区小说区 | 亚洲影院天堂 | 国产精品福利在线 | 色网站免费在线观看 | 午夜久久美女 | 国产亚洲综合性久久久影院 | 亚洲三级av| 黄色片软件网站 | 色婷婷狠狠18 | 亚洲一二区视频 | 免费污片| 97在线看| 欧美日韩精品在线播放 | 美女一二三区 | 99视屏 | 精品久久综合 | av资源免费在线观看 | 69久久99精品久久久久婷婷 | 精品视频免费久久久看 | 色综合久 | 成人久久久精品国产乱码一区二区 | 国产中文在线播放 | 欧美日韩中字 | www.91av在线 | 久久久一本精品99久久精品 | 日韩高清免费在线 | 中文字幕视频网 | 天天操天天干天天操天天干 | 日韩免费视频线观看 | 免费久久网| 亚洲黄a| 中文欧美字幕免费 | 国产精品色婷婷视频 | 久久精选视频 | 欧美aa级 | 色亚洲网 | 国产精品18久久久久久久久久久久 | 高清久久久久久 | 97视频人人澡人人爽 | 国产成人精品一区二区三区在线观看 | 国产美女精品视频 | 九热精品| 特级西西444www大胆高清无视频 | 国产无吗一区二区三区在线欢 | 国产中文字幕视频在线观看 | 狠狠色狠狠色 | 日黄网站 | 久久久视频在线 | 国产99精品在线观看 | 日本激情视频中文字幕 | 国产区网址 | 日韩欧美aaa | 亚洲国产成人在线 | 国产亚洲91 | 国产色黄网站 | 丁香午夜婷婷 | 五月婷婷影院 | 色婷婷成人网 | 99久久9| 日本精a在线观看 | 天天拍天天爽 | 国产精品久久麻豆 | 免费在线观看成人小视频 | 手机在线免费av | 久久综合婷婷综合 | 久久精品国产第一区二区三区 | 久久久久久久av | 国产999免费视频 | 四虎国产视频 | 五月婷婷视频在线观看 | 99热精品久久 | 日日夜夜天天综合 | 成人久久网| 亚州av成人 | 91精品国产自产在线观看 | 国产精品视频免费 | 久久99爱视频 | 男女日麻批 | 成年人天堂com | 亚洲资源一区 | 日韩欧美极品 | 999成人免费视频 | 一区二区精品视频 | 欧美精品久久久久久久久久久 | 中文字幕一区二区在线播放 | 国产一级视频在线观看 | 国产香蕉视频在线观看 | 最新av电影网站 | 96精品在线 | 香蕉久草在线 | 国产精品久免费的黄网站 | 日本护士撒尿xxxx18 | 精品一二三四在线 | 亚洲伊人天堂 | 久久九九精品久久 | 在线免费观看欧美日韩 | 免费在线观看日韩视频 | 欧美另类重口 | 免费看色网站 | 亚洲在线精品 | 中中文字幕av | 国产精品igao视频网入口 | 一级欧美黄 | 日本精品在线视频 | 免费十分钟 | 亚洲精品乱码久久久久久写真 | 精品爱爱 | 国产在线一线 | 久草在线| 国产美女精品人人做人人爽 | 亚洲国产影院 | 色综合天天爱 | 久久老司机精品视频 | 天天色播| 中文字幕高清有码 | 丁香久久久 | 夜夜骑天天操 | 91精品久久香蕉国产线看观看 | 视频一区二区国产 | 免费国产黄线在线观看视频 | 国产九色91 | 亚洲欧美日韩在线一区二区 | 亚洲一区二区麻豆 | 欧洲精品二区 | www狠狠操| 国产在线精品一区 | 久久1电影院 | 日韩视频免费在线观看 | 久久久午夜视频 | 欧洲色吧 | 亚洲永久精品在线观看 | 黄色成人在线网站 | 免费看的国产视频网站 | 日本精品一| 国产一区影院 | 久久综合精品国产一区二区三区 | 天天操夜夜摸 | 久久一区二区三区国产精品 | 久久婷婷影视 | 成人黄色大片网站 | 在线观看视频h | 中文字幕色综合网 | 四虎影视成人 | 激情影音 | 99久久网站 | 天天干天天做天天操 | 亚洲国产日韩精品 | 91九色视频 | 黄色aa久久| 亚洲最大成人免费网站 | 欧美日韩在线免费视频 | 一区二区三区手机在线观看 | 少妇精品久久久一区二区免费 | 日韩免费在线看 | 99色人| 日日弄天天弄美女bbbb | 麻豆视频免费看 | 国产美女精品视频 | 蜜臀av夜夜澡人人爽人人 | av色一区| 又黄又爽又色无遮挡免费 | 一区二区日韩av | 久久人人爽av | 一区二区电影在线观看 | 蜜臀久久99静品久久久久久 | 国产探花视频在线播放 | 天天拍天天操 | 在线播放日韩av | 久久久久久久av | 亚洲精品国精品久久99热一 | 蜜臀久久99精品久久久酒店新书 | 久久尤物电影视频在线观看 | 亚洲免费视频观看 | 日韩在线观看视频网站 | 涩涩爱夜夜爱 | 欧美精品在线观看 | 成片人卡1卡2卡3手机免费看 | 国产精品二区三区 | 一区二区三区四区五区六区 | 亚洲一区日韩在线 | av丝袜在线| 99国产在线观看 | 亚洲成人一区 | 性色视频在线 | 久草网视频| 色五月成人 | 又大又硬又黄又爽视频在线观看 | 久久视影 | 久视频在线 | 麻豆传媒在线免费看 | 黄色av一级 | 国产精品久久久久久久久免费 | 久久久亚洲国产精品麻豆综合天堂 | 国产不卡免费av | 91视频在线免费看 | 国产成人av网 | 精品国产电影 | 国产在线免费 | 97久久精品午夜一区二区 | 在线观看视频精品 | 人成电影网| 欧美国产精品一区二区 | 精品国产午夜 | 久久激情婷婷 | 黄色免费国产 | 欧美疯狂性受xxxxx另类 | 亚州人成在线播放 | 欧美精品久久久久 | 婷婷日 | 天天操夜夜操天天射 | 精品字幕| av3级在线 | 天天天天天干 | 亚洲人xxx | 欧美日韩3p| 欧美亚洲国产精品久久高清浪潮 | av日韩国产 | 日本精品中文字幕 | 精品视频在线免费 | 成人av电影免费在线播放 | 国产三级国产精品国产专区50 | 色婷婷狠狠操 | 中文av在线免费观看 | 麻豆一二三精选视频 | 精品色综合 | 国产成人av电影在线观看 | 日日操日日 | 国产一区二区三区免费观看视频 | 亚洲欧美日韩一区二区三区在线观看 | 久久精品超碰 | 三级动态视频在线观看 | 人人干人人超 | 又黄又爽又刺激视频 | 国产护士hd高朝护士1 | 久久久99精品免费观看乱色 | 国产精品人成电影在线观看 | 欧美色插| 亚洲乱码久久久 | 婷婷亚洲最大 | 国产精品视频最多的网站 | 国产成人av在线影院 | 免费观看一区二区 | 婷婷在线网站 | 国产午夜精品免费一区二区三区视频 | 欧美激情第一区 | 天堂av官网 | 精品美女视频 | 精品久久久久久亚洲综合网站 | 麻豆精品传媒视频 | 成人97人人超碰人人99 | 午夜影院一级 | 久久精品在线 | 天天爱天天射天天干天天 | 91尤物在线播放 | 日本性生活免费看 | 中文在线8新资源库 | 久久综合导航 | 天天曰天天射 | 亚洲国产精品va在线看黑人 | 在线日韩精品视频 | 91热视频在线观看 | 97精品国自产拍在线观看 | 99热超碰在线 | 欧美日韩高清一区二区 | 91精品在线观看视频 | 日韩小视频 | 综合久久久 | 国产精品欧美精品 | 2023年中文无字幕文字 | 国产91大片 | 91久久国产精品 | 国产精品www | 日本在线观看一区 | 9999精品 | 香蕉视频一级 | 天天干 夜夜操 | 久久久久www | 狠狠干美女 | 久久99久久精品国产 | 亚洲视频999 | 国产99黄| 成人久久视频 | 色爽网站 | 在线电影中文字幕 | 婷婷在线免费 | 日韩精品1区2区 | 色偷偷97| 久久九九精品 | 免费av视屏| 国产亚洲在线视频 | 日韩在线视频国产 | 97综合网 | 九热精品 | 欧美日韩国产综合一区二区 | 久久免费毛片 | 国产精品亚洲精品 | 欧美日韩精品电影 | 免费欧美高清视频 | 国产精品久久久久一区二区三区共 | 久久国产日韩 | 久久国产美女 | 91资源在线视频 | 天天操天天操天天操天天操天天操天天操 | 中国一级片在线观看 | av高清在线观看 | 午夜美女影院 | 亚洲欧洲国产日韩精品 | 亚洲成人网av | 日韩一级理论片 | 99久久这里只有精品 | 黄色免费大全 | 免费高清在线观看电视网站 | 免费在线播放视频 | 欧美一区二区三区四区夜夜大片 | 一区二区三区免费在线 | 天天干,天天射,天天操,天天摸 | 91免费看黄色 | 摸阴视频 | 国产高清精品在线观看 | 国产成人777777 | 日韩国产欧美在线播放 | 麻豆视频免费观看 | 亚洲国产精品va在线看黑人动漫 | 91在线资源 | 精品国产一区在线观看 | 日韩黄色软件 | 国产精品激情 | 911国产在线观看 | 在线免费观看黄色大片 | 夜夜操网| 久久精品第一页 | 久久夜夜操 | 超碰97.com| 成人在线观看资源 | 天天综合色网 | 婷婷丁香av| 少妇bbb搡bbbb搡bbbb | 激情一区二区三区欧美 | 免费成视频 | 99精品视频99 | 日韩久久视频 | av在线小说 | 国产在线免费 | 婷婷在线综合 | 成人av网站在线观看 | 亚洲国产成人精品电影在线观看 | 国产精品99久久久久的智能播放 | 四虎在线免费 | 狠狠躁夜夜躁人人爽超碰91 | 国产午夜精品一区二区三区四区 | 国内99视频 | 亚洲香蕉在线观看 | 欧美巨大荫蒂茸毛毛人妖 | 国产护士在线 | 国产看片网站 | 2019中文最近的2019中文在线 |