zoukankan      html  css  js  c++  java
  • hdu 5306 优先队列

    用到优先队列  

     1 #include<iostream>
     2 #include<string>
     3 #include<algorithm>
     4 #include<cstdio>
     5 #include<vector>
     6 #include<queue>
     7 #define N 1000005
     8 using namespace std;
     9 struct Node
    10 {
    11     int r,l,id;
    12     bool operator <(Node a) const{return l>a.l;}//为了优先队列的优先级的排列,>队列顶端是最小的,反之是最大的
    13 }soda[N];
    14 int cmp(Node a,Node b)
    15 {
    16     return a.r<b.r;
    17 }
    18 int vis[1000005];
    19 vector<int> ans;
    20 priority_queue<Node> que;
    21 int main()
    22 {
    23     int t;
    24     cin>>t;
    25     while(t--)
    26     {
    27         int n;
    28         cin>>n;
    29         memset(vis,0,sizeof(vis));
    30         ans.clear();
    31         while(!que.empty()) que.pop();
    32         for(int i=0;i<n;i++)
    33         {
    34             cin>>soda[i].r;
    35             soda[i].id=i+1;
    36         }
    37         for(int i=0;i<n;i++) cin>>soda[i].l;
    38         sort(soda,soda+n,cmp);
    39         int num=0;
    40         int id=0;
    41         for(int i=0;i<n;i++)
    42         {
    43             while(id<n)
    44             {
    45                 if(soda[id].r<=num)
    46                 {
    47                     que.push(soda[id]);
    48                     id++;
    49                 }
    50                 else break;
    51             }
    52             while(!que.empty())
    53             {
    54                 if(que.top().l>=num)
    55                 {
    56                     ans.push_back(que.top().id);
    57                     vis[que.top().id]=1;
    58                     que.pop();
    59                     num++;
    60                     break;
    61                 }
    62                 else que.pop();
    63             }
    64         }
    65         int cnt = 0 ;
    66         int i;
    67         printf("%d\n", ans.size()) ;
    68         for(i = 0 ; i < ans.size() ; i++)
    69         {
    70             cnt++ ;
    71             if( cnt == n )
    72                 printf("%d\n", ans[i]) ;
    73             else
    74                 printf("%d ", ans[i]) ;
    75         }
    76         for(i = 1 ; i <= n ; i++)
    77         {
    78             if( vis[i] ) continue ;
    79             cnt++ ;
    80             if( cnt == n )
    81                 printf("%d\n", i) ;
    82             else
    83                 printf("%d ", i) ;
    84         }
    85     }
    86     return 0;
    87 
    88 }
  • 相关阅读:
    LeetCode 258 Add Digits
    LeetCode 231 Power of Two
    LeetCode 28 Implement strStr()
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 21 Merge Two Sorted Lists
    LeetCode 20 Valid Parentheses
    图形处理函数库 ImageTTFBBox
    php一些函数
    func_get_arg(),func_get_args()和func_num_args()的用法
    人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/4760069.html
Copyright © 2011-2022 走看看