zoukankan      html  css  js  c++  java
  • 【HDOJ6301】Distinct Values(贪心,set)

    题意:给定一个n个数的数列与m个区间,要求每个区间内的数字互不相同,求使得数列字典序最小的方案

    n<=1e5

    思路:

     1 #include<cstdio>
     2 #include<vector>
     3 #include<algorithm>
     4 #include<set>
     5 #define N 110000
     6 using namespace std;
     7 int cas,ends[N],ans[N];
     8 
     9 int main()
    10 {
    11     freopen("1004.in","r",stdin);
    12     freopen("1004.out","w",stdout);
    13     scanf("%d",&cas);
    14     while(cas--)
    15     {
    16         int n,m;
    17         scanf("%d%d",&n,&m); 
    18         //printf("%d %d",n,m);
    19        // for(int i=1;i<=N;i++) ends[i]=0;
    20         for(int i=1;i<=n;i++) ends[i]=i;
    21         for(int i=1;i<=m;i++)
    22         {
    23           int l,r;
    24           scanf("%d%d",&l,&r);
    25           //printf("%d %d
    ",l,r);
    26           ends[l]=max(ends[l],r);
    27         }
    28         set<int>unused;
    29         for(int i=1;i<=n;i++) unused.insert(i);
    30         int l=1,r=0;
    31         for(int i=1;i<=n;i++)
    32         {
    33           if(r>=ends[i]) continue;
    34           while(l<i) unused.insert(ans[l++]);
    35           while(r<ends[i])
    36           {
    37               ans[++r]=*unused.begin();
    38               unused.erase(ans[r]);
    39           }
    40         }
    41         for(int i=1;i<=n;i++)
    42         {
    43             printf("%d",ans[i]);
    44             if(i<n) printf(" ");
    45         }
    46         //printf("%d %d",n,m);
    47         printf("
    ");
    48     }
    49     return 0;
    50 }
    51 
    52 
    53  
  • 相关阅读:
    Java应用调优指南之-工具篇
    2016第18周四
    2016第18周三
    IE下JS接受ActiveX控件方法
    2016第18周一
    Jquery插件写法及extentd函数
    2016第17周六
    嘛:如何远视 还有遥远的未来
    寻找失踪的整数数组(Find the missing integer)
    Cocos2d-x 2地图步行实现:SPFA算法
  • 原文地址:https://www.cnblogs.com/myx12345/p/9389323.html
Copyright © 2011-2022 走看看