码迷,mamicode.com
首页 > 其他好文 > 详细

poj1785 Binary Search Heap Construction

时间:2015-09-23 17:02:09      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

此题可以先排序再用rmq递归解决。

当然可以用treap。

 

http://poj.org/problem?id=1785

 

 

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 const int maxn = 5e4 + 10;
 6 struct Point{
 7     char str[15];
 8     int pr;
 9     bool operator < (const Point& rhs) const{
10         return strcmp(str, rhs.str) < 0;
11     }
12 }a[maxn];
13 
14 struct Data{
15     int p, v;
16 }st[maxn][20];
17 
18 int n;
19 
20 int query(int l, int r){
21     int len = r - l, d = 0;
22     while((1 << d) <= len) d++;
23     if(st[l][d - 1].v > st[r - (1 << (d - 1))][d - 1].v) return st[l][d - 1].p;
24     else return st[r - (1 << (d - 1))][d - 1].p;
25 }
26 
27 void print(int l, int r){
28     if(l > r) return;
29     putchar(();
30     int maxp = query(l, r + 1);
31     print(l, maxp - 1);
32     printf("%s", a[maxp].str);
33     print(maxp + 1, r);
34     putchar());
35 }
36 
37 void RMQ(){
38     for(int j = 0; j < n; j++) st[j][0].v = a[j].pr, st[j][0].p = j;
39     for(int i = 1; (1 << i) <= n; i++) for(int j = 0; j < n; j++){
40         if(j + (1 << i) <= n){
41             if(st[j][i - 1].v > st[j + (1 << (i - 1))][i - 1].v){
42                 st[j][i].v = st[j][i - 1].v;
43                 st[j][i].p = st[j][i - 1].p;
44             }else{
45                 st[j][i].v = st[j + (1 << (i - 1))][i - 1].v;
46                 st[j][i].p = st[j + (1 << (i - 1))][i - 1].p;
47             }
48         }
49     }
50 }
51 
52 int main(){
53     //freopen("in.txt", "r", stdin);
54     //freopen("out.txt", "w", stdout);
55     while(~scanf("%d", &n) && n){
56         for(int i = 0; i < n; i++){
57             scanf("%s", a[i].str);
58             int len = strlen(a[i].str);
59             a[i].pr = 0;
60             for(int j = len - 1, p = 1; a[i].str[j] != /; j--, p *= 10)
61                 a[i].pr += p * (a[i].str[j] - 0);
62         }
63         sort(a, a + n);
64         RMQ();
65         print(0, n - 1);
66         putchar(\n);
67     }
68     return 0;
69 }
View Code

 

poj1785 Binary Search Heap Construction

标签:

原文地址:http://www.cnblogs.com/astoninfer/p/4832559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!