Language: C++

#include <bits/stdc++.h>
#define rrep(i,n) for(int i = 1; i <= (n); ++i)
#define drep(i,n) for(int i = (n)-1; i >= 0; --i)
#define srep(i,s,t) for (int i = s; i < t; ++i)
#define rng(a) a.begin(),a.end()
#define maxs(x,y) (x = max(x,y))
#define mins(x,y) (x = min(x,y))
#define limit(x,l,r) max(l,min(x,r))
#define lims(x,l,r) (x = max(l,min(x,r)))
#define pb push_back
#define sz(x) (int)(x).size()
#define pcnt __builtin_popcountll
#define uni(x) x.erase(unique(rng(x)),x.end())

#define PQ(T) priority_queue<T,v(T),greater<T> >
#define bn(x) ((1<<x)-1)
#define dup(x,y) (((x)+(y)-1)/(y))
#define newline puts("")
#define v(T) vector<T>
#define vv(T) v(v(T))
using namespace std;
typedef long long int ll;
typedef unsigned uint;
typedef unsigned long long ull;
typedef pair<int,int> P;

typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<P> vp;
inline int in() { int x; scanf("%d",&x); return x;}
template<typename T>inline istream& operator>>(istream&i,v(T)&v)
{rep(j,sz(v))i>>v[j];return i;}
template<typename T>string join(const v(T)&v)
{stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}
template<typename T>inline ostream& operator<<(ostream&o,const v(T)&v)
{if(sz(v))o<<join(v);return o;}
template<typename T1,typename T2>inline istream& operator>>(istream&i,pair<T1,T2>&v)
{return i>>v.fi>>v.se;}
template<typename T1,typename T2>inline ostream& operator<<(ostream&o,const pair<T1,T2>&v)
{return o<<v.fi<<","<<v.se;}
template<typename T>inline ll suma(const v(T)& a) { ll res(0); for (auto&& x : a) res += x; return res;}
const double eps = 1e-10;
const ll LINF = 1e18;
const int INF = 1001001001;
#define dame { puts("-1"); return 0;}
#define yn {puts("YES");}else{puts("NO");}
const int MX = 200005;

int main() {
  int n,m;
  scanf("%d%d",&n,&m);
  vector<int> r(n,INF);
  for(int i=0; i<m; i++) {
    int a,b;
    scanf("%d%d",&a,&b);
    --a; --b;
    r[a] = min(r[a], b);
  }
  int x = INF, ans = 0;
  for(int i=0; i<n; i++){
    if (x == i) x = INF, ans++;
    x = min(x, r[i]);
  }

  cout<<ans<<endl;
  return 0;
}






















Compiler output:
a.cc:27:16: error: 'vi' was not declared in this scope; did you mean 'v'?
   27 | typedef vector<vi> vvi;
      |                ^~
      |                v
a.cc:27:18: error: template argument 1 is invalid
   27 | typedef vector<vi> vvi;
      |                  ^
a.cc:27:18: error: template argument 2 is invalid
a.cc: In function 'std::istream& operator>>(std::istream&, std::vector<_Tp>&)':
a.cc:32:6: error: 'j' was not declared in this scope
   32 | {rep(j,sz(v))i>>v[j];return i;}
      |      ^
a.cc:32:2: error: there are no arguments to 'rep' that depend on a template parameter, so a declaration of 'rep' must be available [-fpermissive]
   32 | {rep(j,sz(v))i>>v[j];return i;}
      |  ^~~
a.cc:32:2: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
a.cc:32:14: error: expected ';' before 'i'
   32 | {rep(j,sz(v))i>>v[j];return i;}
      |              ^
      |              ;
a.cc: In function 'std::string join(const std::vector<_Tp>&)':
a.cc:34:21: error: 'i' was not declared in this scope
   34 | {stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}
      |                     ^
a.cc:34:17: error: there are no arguments to 'rep' that depend on a template parameter, so a declaration of 'rep' must be available [-fpermissive]
   34 | {stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}
      |                 ^~~
a.cc:34:29: error: expected ';' before 's'
   34 | {stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}
      |                             ^
      |                             ;