POJ 2828 Buy Tickets(線段樹),poj2828
Language:DefaultBuy Tickets
| Time Limit: 4000MS |
|
Memory Limit: 65536K |
| Total Submissions: 13847 |
|
Accepted: 6926 |
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year was approaching, but unluckily the Little Cat still had schedules going here and there. Now, he had to travel by train to Mianyang, Sichuan Province for the winter camp selection of the national team of Olympiad in Informatics. It was one o’clock a.m. and dark outside. Chill wind from the northwest did not scare off the people in the queue. The cold night gave the Little Cat a shiver. Why not find a problem to think about? That was none the less better than freezing to death! People kept jumping the queue. Since it was too dark around, such moves would not be discovered even by the people adjacent to the queue-jumpers. “If every person in the queue is assigned an integral value and all the information about those who have jumped the queue and where they stand after queue-jumping is given, can I find out the final order of people in the queue?” Thought the Little Cat. Input There will be several test cases in the input. Each test case consists of N + 1 lines where N (1 ≤ N ≤ 200,000) is given in the first line of the test case. The next N lines contain the pairs of values Posi and Vali in the increasing order of i (1 ≤ i ≤ N). For each i, the ranges and meanings of Posi and Vali are as follows:
- Posi ∈ [0, i − 1] — The i-th person came to the queue and stood right behind the Posi-th person in the queue. The booking office was considered the 0th person and the person at the front of the queue was considered the first person in the queue.
- Vali ∈ [0, 32767] — The i-th person was assigned the value Vali.
There no blank lines between test cases. Proceed to the end of input. Output For each test cases, output a single line of space-separated integers which are the values of people in the order they stand in the queue. Sample Input 40 771 511 332 6940 205231 192431 38900 31492 Sample Output 77 33 69 5131492 20523 3890 19243 Hint The figure below shows how the Little Cat found out the final order of people in the queue described in the first test case of the sample input. Source POJ Monthly--2006.05.28, Zhu, Zeyuan
|
買票插隊,從後往前,以為後面的肯定就是確定的
//排隊,輸入n,然後n行 a b 表示b插在a的位置,最後輸出最終隊伍的編號//對於這個題有一個問題需要注意,就是插入位置為0需要加1,也就是把所有的位置加1#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define L(x) (x<<1)#define R(x) (x<<1|1)#define MID(x,y) ((x+y)>>1)using namespace std;#define N 200005int ans[N],a[N],va[N];struct stud{int le,ri;int len;}f[N*4];int n;void build(int pos,int le,int ri){ f[pos].le=le; f[pos].ri=ri; f[pos].len=ri-le+1; if(le==ri) return ; int mid=MID(le,ri); build(L(pos),le,mid); build(R(pos),mid+1,ri);}void update(int pos,int le,int va){ f[pos].len--; if(f[pos].le==f[pos].ri) { ans[f[pos].le]=va; return ; } if(f[L(pos)].len>=le) update(L(pos),le,va); else update(R(pos),le-f[L(pos)].len,va);}int main(){ int i; while(~scanf("%d",&n)) { build(1,1,n); for(i=1;i<=n;i++) scanf("%d%d",&a[i],&va[i]); for(i=n;i>=1;i--) update(1,a[i]+1,va[i]); for(i=1;i<=n;i++) if(i==1) printf("%d",ans[i]); else printf(" %d",ans[i]); printf("\n"); } return 0;}
誰有資料結構的演算法跟POJ題目的對應關係
打星號的表示個人認為比較經典,或是演算法比較好的題目
1195 Mobile phones 樹狀數組
1455
1521 Entropy huffman
1703 Find them, Catch them 並查集
1785 Binary Search Heap Construction
1794 Castle Walls 逆序對
1961 Period KMP重複因子
1984* Navigation Nightmare 並查集+座標平移
1986* Distance Queries LCA
1988* Cube Stacking 並查集應用
1990* MooFest 線段樹
2010* Moo University - Financial Aid 最大堆-最小堆
2182 Lost Cows 線段樹
2183 Bovine Math Geniuses hash
2188 Cow Laundry 逆序對
2227 The Wedding Juicer 堆+floodfill
2236 Wireless Network 並查集
2266* Quadtree 遞迴構造四叉樹
2269* Friends 運算式
2270 Quadtree II or: Florida Jones strikes back 將2266反之
2299 Ultra-QuickSort 歸併排序
2352 Stars 樹狀數組
2395 Out of Hay 並查集
2482 Stars in Your Window 靜態2叉樹
2513 Colored Sticks 並查集
2524 Ubiquitous Religions 並查集
2528 Mayor's posters 線段樹
2567 Code the Tree
2750* Potted Flower 線段樹
2777 Count Color 線段樹
2796 Feel Good RMQ
2823 Sliding Window 堆或雙端隊列
2828 Buy Tickets 線段樹
2886* Who Gets the Most Candies? 線段樹
2892* Tunnel Warfare 樹狀數組
3214* Heap 後序遍曆,每個節點減去相應sub保證屬性,然後對遍曆結果求最長不下降序列
3253 Fence Repair huffman
3263 Tallest Cow 線段樹
3274* Gold Balanced Lineup hash
3277 City Horizon 線段樹
3320 Jessica's Reading Problem 隊列操作或最小堆
3321* Apple Tree 樹狀數組
3332 Parsing Real Numbers DFA
3344 Chessboard Dance 隊列類比
3349 Snowflake Snow Snowflakes hash(or 暴力)
3437 Tree Grafting dfs樹構造
3461 Oulipo KMP
3468 A Simple Problem with Integers 線段樹區間更新,懶操作
3631 Cuckoo Hashing 並查集
3667 Hotel 線段樹
3690 Constellations trie匹配
3695 Rectangles 矩陣切割...餘下全文>>