日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线段树什么的最讨厌了

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线段树什么的最讨厌了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

小Y 最近學習了線段樹,但是由于她的智商比較低,運用的還不是很熟練。于是小R 給了她一點練習題訓練,其中有一道是這樣的。
這是小R 寫的線段樹的一段建樹代碼:

只要調用buildtree(1,0,n) 就可以得到一顆線段樹了。顯然,一顆線段樹一共有O(n) 個節點,因為每一個節點都代表了一個不同的區間,所以線段樹上一共出現了O(n) 個不同的區間。
現在小R 給了你一個區間[l; r],他想要你告訴他一個最小的n 使得區間[l; r] 出現在了用buildtree(1,0,n) 建出來的線段樹中。

Input

第一行輸入一個正整數T 表示數據組數。
接下來T 行每行三個整數L;R; lim 表示一組詢問,如果對于所有的0 <= n <= lim 都不存在滿足條件的解,輸出-1 即可。

Output

對于每組詢問輸出一個答案。

Sample Input

2
0 5 10
6 7 10

Sample Output

5
7

Data Constraint

.
.
.
.
.
分析
我們可以從該區間逆向推它的父節點
以該區間為左子樹或為右子樹

共有四種情況:
q=y-x+1;
dfs(x-q,y);
dfs(x-q-1,y);
dfs(x,y+q-1);
dfs(x,y+q);

一定注意剪枝,沒做好可能會直接爆蛋

.
.
.
.
.
程序:

#include<iostream> #include<cstdio> #include<cstring> using namespace std; long long l,r,lim; long long minn;void dfs(long long x,long long y) {if (y>lim) return;if (y>=minn) return;if (x==0){minn=y;return;}long long q=y-x+1;if (x-q==0||x-q>=q+q) dfs(x-q,y);if (x-q==1||x-q-1>=q+q+1) dfs(x-q-1,y);if (x>=q+q-1) dfs(x,y+q-1);if (x>q+q) dfs(x,y+q); }int main() {int t;scanf("%d",&t);while (t--){scanf("%lld%lld%lld",&l,&r,&lim);if (r>lim){printf("-1\n");continue;}if (l>r){printf("-1\n");continue;}minn=2147483647;dfs(l,r);if (minn!=2147483647){if (minn<=lim) printf("%lld\n",minn); else printf("-1\n");} else printf("-1\n");}return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/10458953.html

總結

以上是生活随笔為你收集整理的线段树什么的最讨厌了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。