Submission #263421

#TimeUsernameProblemLanguageResultExecution timeMemory
263421CaroLindaNew Home (APIO18_new_home)C++14
10 / 100
594 ms55532 KiB
/* Playing the sand Holding your hand Cause I remember every sunset I remember every word you said */ #include <bits/stdc++.h> #define lp(i,a,b) for(int i = a; i < b ; i++) #define ff first #define ss second #define pb emplace_back #define ll long long #define mk make_pair #define sz(x) (int)(x.size()) #define pii pair<int,int> #define mkt make_tuple #define debug #define all(x) x.begin(),x.end() const int MAX = 3e5+10 ; const int MAX_COORD = 1e8+10 ; using namespace std ; struct Event { int type , x, id , xIntercept ; Event(int type = 0 , int x = 0 , int id = 0 , int xIntercept = 0 ) : type(type) , x(x) , id(id) , xIntercept(xIntercept) {} bool operator < (Event other) const { if(x == other.x ) return type < other.type ; return x < other.x ; } }; int N , K , Q ; int mxNegative, mnPositive = MAX_COORD ; int ansQuery[MAX] ; vector<int> store[MAX] ; vector< pair<int,int> > lines ; vector<Event> sweepPositive, sweepNegative ; void add(int slope , int beg, int en ) { debug("Adding the so-called line %d %d %d\n" , slope , beg, en ) ; if( slope == -1 ) sweepNegative.emplace_back( Event(0, beg , 0 , en) ) ; else sweepPositive.emplace_back( Event(1,en , 0 , beg ) ) ; } void impossible() { for(int i = 1 ; i <= Q ; i++ ) printf("-1\n") ; exit(0) ; } int main() { scanf("%d%d%d", &N , &K , &Q ); for(int i = 1 ; i <= N ; i++ ) { int location , shop , year1, year2 ; scanf("%d%d%d%d", &location , &shop, &year1, &year2 ) ; assert( year1 == 1 && year2 == 100000000 ) ; store[ shop ].emplace_back( location ) ; } for(int i = 1 , x , year ; i <= Q ; i++ ) { scanf("%d%d", &x, &year ) ; sweepNegative.emplace_back( Event(1,x,i, 0) ) ; sweepPositive.emplace_back( Event(0, x, i, 0) ) ; } for(int i = 1 ; i <= K ; i++ ) { if( sz(store[i]) == 0 ) impossible() ; sort( all(store[i]) ) ; int storeSize = sz(store[i]) ; //Let's add all negative slopes first add( -1 , -1 , store[i][0] ) ; for(int j = 1 ; j < sz(store[i]) ; j++ ) add(-1, ceil( (1.0*store[i][j] + 1.0*store[i][j-1])/2.0 ) , store[i][j] ) ; //Now let's add positive slopes add(1, store[i][ storeSize-1 ] , MAX_COORD) ; for(int j = storeSize-2 ; j >= 0 ; j-- ) add(1, store[i][j] , (store[i][j]+store[i][j+1])/2 ) ; } sort( all(sweepNegative) ) ; sort( all(sweepPositive) ) ; reverse( all(sweepPositive) ) ; for(auto e : sweepNegative) { if( e.type == 0 ) { mxNegative = max( mxNegative, e.xIntercept ) ; continue ; } ansQuery[ e.id ] = max( ansQuery[e.id] , mxNegative - e.x ) ; } for(auto e : sweepPositive ) { if( e.type == 1 ) { mnPositive = min( mnPositive, e.xIntercept ) ; continue ; } ansQuery[e.id] = max( ansQuery[e.id] , e.x - mnPositive ) ; } for(int i = 1 ; i <= Q ; i++ ) printf("%d\n", ansQuery[i] ) ; }

Compilation message (stderr)

new_home.cpp: In function 'void add(int, int, int)':
new_home.cpp:53:11: warning: left operand of comma operator has no effect [-Wunused-value]
   53 |     debug("Adding the so-called line %d %d %d\n" , slope , beg, en ) ;
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:53:60: warning: right operand of comma operator has no effect [-Wunused-value]
   53 |     debug("Adding the so-called line %d %d %d\n" , slope , beg, en ) ;
      |                                                            ^~~
new_home.cpp:53:65: warning: right operand of comma operator has no effect [-Wunused-value]
   53 |     debug("Adding the so-called line %d %d %d\n" , slope , beg, en ) ;
      |                                                                 ^~
new_home.cpp: In function 'int main()':
new_home.cpp:69:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   69 |     scanf("%d%d%d", &N , &K , &Q  );
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:74:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   74 |         scanf("%d%d%d%d", &location , &shop, &year1, &year2 ) ;
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:85:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   85 |         scanf("%d%d", &x, &year ) ;
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...