Advertisement
BoxerTC

Zhenya moves from parents

Oct 25th, 2014
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define sc( x ) scanf( "%d" , &x )
  5. #define REP( i , n ) for( int i = 0 ; i < n ; ++i )
  6. #define clr( t , val ) memset( t , val , sizeof( t ) )
  7.  
  8. #define pb push_back
  9. #define all( v ) v.begin() , v.end()
  10. #define SZ( v ) ((int)(v).size())
  11.  
  12. #define mp make_pair
  13. #define fi first
  14. #define se second
  15.  
  16. #define N 100000
  17.  
  18. typedef pair< int , int > pii;
  19. typedef vector< pii > vpii;
  20. typedef vector< int > vi;
  21. typedef long long ll;
  22.  
  23. struct Node{
  24.     int val ;
  25.     ll prior;
  26.     Node(){}
  27.     Node( int val , ll prior ) : val( val ) , prior( prior ) {}
  28. };
  29. bool operator < ( const Node &p , const Node &q ){
  30.     return p.prior < q.prior;
  31. }
  32. #define v1 ((node<<1)+1)
  33. #define v2 (v1+1)
  34. #define med ((a+b)>>1)
  35. #define LEFT v1 , a , med
  36. #define RIGHT v2 , med + 1 , b
  37.  
  38. ll pref[ 4 * N + 5 ] , sum[ 4 * N + 5 ];
  39. void update( int node , int a , int b , int pos , int val ){
  40.     if( pos > b || a > pos ) return;
  41.     if( a == b ){
  42.         pref[ node ] = val ;
  43.         sum[ node ] = val;
  44.         return;
  45.     }
  46.     update( LEFT , pos , val );
  47.     update( RIGHT , pos , val );
  48.     sum[ node ] = sum[ v1 ] + sum[ v2 ];
  49.     pref[ node ] = min( pref[ v1 ] , sum[ v1 ] + pref[ v2 ] );
  50. }
  51.  
  52. int n;
  53. int main(){
  54.     ios_base :: sync_with_stdio( 0 );
  55.     int val;
  56.     string date , hour;
  57.     while( cin >> n ){
  58.         vector< Node > V;
  59.         REP( i , n ){
  60.             cin >> val >> date >> hour;
  61.             //string prior = date.substr( 3 , 2 ) + date.substr( 0 , 2 ) + hour;
  62.             //dd.MM hh:mm
  63.            
  64.             int hh = (hour[ 0 ] - '0')*10 + (hour[ 1 ] - '0');
  65.             int mm = (hour[ 3 ] - '0')*10 + (hour[ 4 ] - '0');
  66.            
  67.             int dd = (date[ 0 ] - '0')*10 + (date[ 1 ] - '0');
  68.             int MM = (date[ 3 ] - '0')*10 + (date[ 4 ] - '0');          
  69.             ll prior = (ll) mm + (ll)hh * 100LL + (ll)dd * 10000LL + (ll)MM * 1000000LL;
  70.            
  71.             //cout << prior << endl;
  72.             V.pb( Node( val , prior ) );
  73.         }
  74.         vector< Node > A = V;
  75.         sort( all( V ) );
  76.         //clr( pref , 0 ) , clr( sum , 0 );
  77.         REP( i , n ){
  78.             int pos = lower_bound( all( V ) , A[ i ] ) - V.begin();
  79.             int val = A[ i ].val;
  80.             update( 0 , 0 , n - 1 , pos , val );
  81.             cout << min( 0LL , pref[ 0 ] ) << '\n';
  82.         }  
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement