// Tadeusz Kielak #include <iostream> #include <algorithm> using namespace std; #define MAX_DOSTAW 500001 long pierwszy[ MAX_DOSTAW ]; long drugi[ MAX_DOSTAW ]; long n, np, nd; int main() { std::ios_base::sync_with_stdio( false); std::cin.tie(NULL); long k, wi, ti, lp, ld, usuniete; long xp; long xd; int typ; np = nd = 0; cin >> n; for( k = 0; k < n; k ++ ) { cin >> typ >> wi >> ti; if( typ == 1 ) // typ pierwszy pierwszy[ np ++ ] = wi - ti; else // typ drugi drugi[ nd ++ ] = wi - ti; } sort( pierwszy, pierwszy + np ); sort( drugi, drugi + nd ); lp = ld = 0; usuniete = 0; while( lp < np && ld < nd ) if( pierwszy [ lp ] == drugi[ ld ] ) { xp = lp; xd = ld; while( pierwszy[ xp ] == pierwszy[ lp ] ) xp ++; while( drugi[ xd ] == drugi[ ld ] ) xd ++; usuniete += min( xd - ld , xp - lp ); lp = xp; ld = xd; } else if( lp < ld ) lp ++; else ld ++; cout << usuniete << '\n'; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | // Tadeusz Kielak #include <iostream> #include <algorithm> using namespace std; #define MAX_DOSTAW 500001 long pierwszy[ MAX_DOSTAW ]; long drugi[ MAX_DOSTAW ]; long n, np, nd; int main() { std::ios_base::sync_with_stdio( false); std::cin.tie(NULL); long k, wi, ti, lp, ld, usuniete; long xp; long xd; int typ; np = nd = 0; cin >> n; for( k = 0; k < n; k ++ ) { cin >> typ >> wi >> ti; if( typ == 1 ) // typ pierwszy pierwszy[ np ++ ] = wi - ti; else // typ drugi drugi[ nd ++ ] = wi - ti; } sort( pierwszy, pierwszy + np ); sort( drugi, drugi + nd ); lp = ld = 0; usuniete = 0; while( lp < np && ld < nd ) if( pierwszy [ lp ] == drugi[ ld ] ) { xp = lp; xd = ld; while( pierwszy[ xp ] == pierwszy[ lp ] ) xp ++; while( drugi[ xd ] == drugi[ ld ] ) xd ++; usuniete += min( xd - ld , xp - lp ); lp = xp; ld = xd; } else if( lp < ld ) lp ++; else ld ++; cout << usuniete << '\n'; return 0; } |