最近開始重新學習splay樹寫的第一題,基本就是照著別人部落格改的一道題,關於splay樹的模板,感覺大牛已經把**改得很短!!!這道題沒什麼難度,乙個插入操作,乙個找前驅,乙個找後驅的操作。(話說這題有個資料有個bug的地方,可以看連線的discuss)。因為沒有push_down,push_up的操作,感覺這題應該算是splay樹裡面最水的一道了吧。
下面附上**:(因為是第一題寫splay樹,照著別人模板寫的,然後寫後面題的時候逐漸完善了一下)
#include #include #include #include #include #define ll long long
#define maxn 110000
using namespace std;
struct splaytree
void newnode(int& rt,int father,int value)
void rotate(int x,int kind)
pre[x] = pre[y];
nt[x][kind] = y;
pre[y] = x;
}void splay(int x,int goal)
else
else}}
if (!goal)
root = x;
}bool insert(int k)
rt = nt[rt][val[rt] < k];
}newnode(nt[rt][val[rt] < k],rt,k);
splay(nt[rt][val[rt] < k],0);
return true;
}int get_pre()
return val[x];
}return -1;
}int get_next()
return val[x];
}return -1;
}};splaytree tree;
int main()}}
printf("%d\n",ans);
}return 0;
}
HNOI2002 營業額統計
花了一天鑽研了splay,然後發現splay沒我想象的那麼難 以前都是寫sbt來著 但是splay的速度確實沒那麼快,但是真的挺好寫的 我寫的版本測了這題以後又用了一下別人的splay,發現通過這題大多數splay在750ms上下,我是688ms,說明還算是不錯的啦 啦啦啦 include incl...
HNOI2002 營業額統計
傳送門 題目大意 求一段序列,小於當前元素的最大值和大於當前元素的最小值。從該元素前面的元素找。題解 建立線段樹維護或者使用雙向鍊錶.或stl水過 線段樹每次插入乙個新值,查詢大於它的最小值和小於它的最大值 雙向鍊錶有點神.我們知道排序後乙個數的前驅就是小於它的最大值 後繼就是大於它的最小值,我們將...
HNOI2002 營業額統計
其實這個題不用平衡樹也可以過的?資料太水了啊 但是我還是本著聯絡平衡樹的想法打了一遍平衡樹。既然是最小的波動,那麼直接找前驅後繼就可以了呀qwq 如下 include include include include define maxn 100010 using namespace std int...