#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class T> inline T popFirst( multiset< T> & a) {
T res = * ( a.begin ( ) ) ;
a.erase ( a.begin ( ) ) ;
return res;
}
template < class T> inline T popFirst( set< T> & a) {
T res = * ( a.begin ( ) ) ;
a.erase ( a.begin ( ) ) ;
return res;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
vector< int > ed[ 100000 ] ;
class Solution{
public :
int maxEvents( vector< vector< int >> & events) {
int i;
int j;
int res = 0 ;
multiset< int > s;
for ( i= ( 0 ) ; i< ( 100000 ) ; i++ ) {
ed[ i] .clear ( ) ;
}
for ( vector< int > & i : events) {
ed[ i[ 0 ] - 1 ] .push_back ( i[ 1 ] - 1 ) ;
}
for ( i= ( 0 ) ; i< ( 100000 ) ; i++ ) {
for ( int j : ed[ i] ) {
s.insert ( j) ;
}
while ( s.size ( ) ) {
j = popFirst( s) ;
if ( j < i) {
continue ;
}
res++ ;
break ;
}
}
return res;
}
}
;
// cLay varsion 20200214-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// vector<int> ed[1d5];
//
// class Solution {
// public:
// int maxEvents(vector<vector<int>>& events) {
// int i, j, res = 0;
// multiset<int> s;
// rep(i,1d5) ed[i].clear();
// for(vector<int> &i : events){
// ed[i[0]-1].push_back(i[1]-1);
// }
//
// rep(i,1d5){
// for(int j : ed[i]) s.insert(j);
// while(s.size()){
// j = popFirst(s);
// if(j < i) continue;
// res++; break;
// }
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIHBvcEZpcnN0KG11bHRpc2V0PFQ+ICZhKXsKICBUIHJlcyA9ICooYS5iZWdpbigpKTsKICBhLmVyYXNlKGEuYmVnaW4oKSk7CiAgcmV0dXJuIHJlczsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBwb3BGaXJzdChzZXQ8VD4gJmEpewogIFQgcmVzID0gKihhLmJlZ2luKCkpOwogIGEuZXJhc2UoYS5iZWdpbigpKTsKICByZXR1cm4gcmVzOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KdmVjdG9yPGludD4gZWRbMTAwMDAwXTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBtYXhFdmVudHModmVjdG9yPHZlY3RvcjxpbnQ+PiYgZXZlbnRzKXsKICAgIGludCBpOwogICAgaW50IGo7CiAgICBpbnQgcmVzID0gMDsKICAgIG11bHRpc2V0PGludD4gczsKICAgIGZvcihpPSgwKTtpPCgxMDAwMDApO2krKyl7CiAgICAgIGVkW2ldLmNsZWFyKCk7CiAgICB9CiAgICBmb3IodmVjdG9yPGludD4gJmkgOiBldmVudHMpewogICAgICBlZFtpWzBdLTFdLnB1c2hfYmFjayhpWzFdLTEpOwogICAgfQogICAgZm9yKGk9KDApO2k8KDEwMDAwMCk7aSsrKXsKICAgICAgZm9yKGludCBqIDogZWRbaV0pewogICAgICAgIHMuaW5zZXJ0KGopOwogICAgICB9CiAgICAgIHdoaWxlKHMuc2l6ZSgpKXsKICAgICAgICBqID0gcG9wRmlyc3Qocyk7CiAgICAgICAgaWYoaiA8IGkpewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHJlcysrOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMDIxNC0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIHZlY3RvcjxpbnQ+IGVkWzFkNV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWF4RXZlbnRzKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGV2ZW50cykgewovLyAgICAgaW50IGksIGosIHJlcyA9IDA7Ci8vICAgICBtdWx0aXNldDxpbnQ+IHM7Ci8vICAgICByZXAoaSwxZDUpIGVkW2ldLmNsZWFyKCk7Ci8vICAgICBmb3IodmVjdG9yPGludD4gJmkgOiBldmVudHMpewovLyAgICAgICBlZFtpWzBdLTFdLnB1c2hfYmFjayhpWzFdLTEpOwovLyAgICAgfQovLyAKLy8gICAgIHJlcChpLDFkNSl7Ci8vICAgICAgIGZvcihpbnQgaiA6IGVkW2ldKSBzLmluc2VydChqKTsKLy8gICAgICAgd2hpbGUocy5zaXplKCkpewovLyAgICAgICAgIGogPSBwb3BGaXJzdChzKTsKLy8gICAgICAgICBpZihqIDwgaSkgY29udGludWU7Ci8vICAgICAgICAgcmVzKys7IGJyZWFrOwovLyAgICAgICB9Ci8vICAgICB9Ci8vIAovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==