Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAX = 1e5 + 10;
  4. #define fi first
  5. #define se second
  6. pair<pair<int, int> , int>p[MAX];
  7. int a[MAX], b[MAX], t[MAX];
  8. map<pair<int, int> , int>cnt;
  9. bool dentro(pair<pair<int, int> , int> &p1, pair<pair<int, int> , int> &p2){
  10.     return p1.fi.fi >= p2.fi.fi && p1.fi.se <= p2.fi.se;
  11. }
  12. int main() {
  13.     int n, m;
  14.     scanf("%d %d", &n, &m);
  15.     for(int i = 0; i < m; ++i){
  16.         scanf("%d %d", &p[i].fi.fi, &p[i].fi.se);
  17.         cnt[make_pair(p[i].fi.fi, p[i].fi.se)]++;
  18.         p[i].se = i + 1;
  19.     }
  20.     for(int i = 0; i < m; ++i)a[p[i].fi.fi]++, a[p[i].fi.se+1]--;
  21.     int ac = 0;
  22.     for(int i = 1; i <= n; ++i){
  23.         ac += a[i];
  24.         b[i] = ac;
  25.     }
  26.     sort(p, p+m, [](pair<pair<int, int> , int> & p1, pair<pair<int, int> , int> &p2) {
  27.         if(p1.fi.fi != p2.fi.fi)return p1.fi.fi < p2.fi.fi;
  28.         return p1.fi.se > p2.fi.se;
  29.     });
  30.     vector< pair<pair<int, int> , int> > v;
  31.     v.push_back(p[0]);
  32.     for(int i = 1; i < m; ++i){
  33.         if(dentro(p[i], v[(int)v.size()-1]))continue;
  34.         v.push_back(p[i]);
  35.     }
  36.     int tot = 0;
  37.     for(int i = 1; i <= n; ++i){
  38.         if(b[i] == 1){
  39.             int lf = 0, rg = v.size()-1;
  40.             while(lf <= rg){
  41.                 int mid = (lf+rg)/2;
  42.                 if( i < v[mid].fi.fi) {
  43.                     rg = mid-1;
  44.                 }else if(i > v[mid].fi.se){
  45.                     lf = mid+1;
  46.                 }else {
  47.                     t[v[mid].se]++;
  48.                     break;
  49.                 }
  50.             }
  51.         }else if(b[i] == 0)++tot;
  52.     }
  53.     for(int i = 0; i < m; ++i)if(cnt[make_pair(p[i].fi.fi, p[i].fi.se)] > 1)t[p[i].se] = 0;
  54.     for(int i = 1; i <= m; ++i)printf("%d\n", tot + t[i]);
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement