Advertisement
Alexandre_lsv

Untitled

Mar 23rd, 2016
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define eps 1e-1
  3. typedef long long ll;
  4. typedef unsigned long long ull;
  5. using namespace std;
  6. const ll fix=(ll)1e10;
  7.  
  8.  
  9.  
  10. multiset<pair<ll, ll>> mset;
  11.  
  12. int main(){
  13.     ifstream fin("cover.in");
  14.     ofstream fout("cover.out");
  15.     ll n, m;
  16.     fin >> n;
  17.     ll a, b;
  18.     fin >> a >> b;
  19.     while (a!=0 || b!=0) {
  20.         ll tmp=a;
  21.         a=min(a, b);
  22.         b=max(tmp, b);
  23.         mset.insert({a, b});
  24.         fin >> a >> b;
  25.     }
  26.  
  27.     set<pair<ll, ll>> res1;
  28.     pair<ll, ll> prevPair = *mset.begin();
  29.     ll beg=0;
  30.     ll end=0;
  31.     beg = prevPair.first;
  32.     end = prevPair.second;
  33.     for (auto&s:mset){
  34.         if (end<s.first){
  35.             res1.insert({beg,end});
  36.             prevPair=s;
  37.             end=s.second;
  38.             beg=s.first;
  39.         }
  40.  
  41.         beg=min(beg,s.first);
  42.         end=max(end,s.second);
  43.         if (s==*mset.rbegin())
  44.             res1.insert({beg, end});
  45.     }
  46.     bool boo=false;
  47.     for (auto&re:res1)
  48.         if (re.first<=0 && re.second>=n)
  49.             boo=true;
  50.  
  51.     if (!boo){
  52.         fout << "No solution";
  53.         return 0;
  54.     }
  55.  
  56.  
  57.  
  58.     set<pair<ll, ll>> res;
  59.     ll prevbord=(ll)-1e9;
  60.     ll bord=0;
  61.     while(true){
  62.         ll maxCov=0;
  63.         pair<ll,ll> maxPair={0,0};
  64.         for (set<pair<ll, ll>>::iterator it = mset.lower_bound({prevbord, prevbord}); it!=mset.upper_bound({bord+1,bord+1}); ++it){
  65.             if (((*it).second>maxCov)){
  66.                 maxCov=(*it).second;
  67.                 maxPair = (*it);
  68.             }
  69.         }
  70.         res.insert(maxPair);
  71.         prevbord=bord;
  72.         bord=maxPair.second;
  73.         if (bord>=n)
  74.             break;
  75.     }
  76.     fout << res.size() << '\n';
  77.     for (auto&re:res)
  78.         fout << re.first << " " << re.second << '\n';
  79.     fin.close();
  80.     fout.close();
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement