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 }
  • 相关阅读:
    npm start报错
    npm install 错误
    vue父子组件间传值
    vue-devtools安装过程的坑
    用js进行排序
    筛选表格数据
    基于ElementUI封装可复用的表格组件
    小程序头部滑动切换
    DisneyDiffuse解析
    基于URP的ScreenSpaceDecal的实现(其实和URP没啥关系)
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/4760069.html
Copyright © 2011-2022 走看看