Submission #37674

#TimeUsernameProblemLanguageResultExecution timeMemory
37674wasylDeda (COCI17_deda)C++11
140 / 140
416 ms14100 KiB
#include <set> #include <vector> #include <cstdio> #include <climits> #include <algorithm> #define d(...) __VA_ARGS__ #define all(x) (x).begin(), (x).end() #define eb(...) emplace_back(__VA_ARGS__) using namespace std;using ll=long long; template<class t>using V = vector< t >; struct Ev { bool typ; int nr, val, id; Ev( bool typ, int nr, int val, int id ) : typ( typ ), nr( nr ), val( val ), id( id ) {} }; inline bool operator< ( const Ev& mn, const Ev& wc ) { return mn.val == wc.val?( mn.nr == wc.nr? mn.typ < wc.typ : mn.nr > wc.nr ) : mn.val < wc.val; } int n, q; V< Ev > evs; V< int > odp; void foo ( int l, int p ) { int mid = ( l + p ) / 2; V< Ev > ilo; for ( int i = l; i <= mid; ++i ) if ( evs[i].typ == false ) ilo.eb( evs[i] ); for ( int i = mid + 1; i <= p; ++i ) if ( evs[i].typ == true ) ilo.eb( evs[i] ); set< int > S; S.insert( INT_MAX ); sort( all( ilo ) ); for ( auto& ev : ilo ) { if ( ev.typ == false ) S.insert( ev.nr ); else odp[ev.id] = min( ( *S.lower_bound( ev.nr ) ), odp[ev.id] ); } if ( mid > l ) { foo( l, mid ); foo( mid + 1, p ); } } int main() { // ios::sync_with_stdio(false); // cin.tie(nullptr); // cin >> n >> q; scanf( "%d%d", &n, &q ); odp.resize( q, INT_MAX ); for ( int i = 0; i < q; ++i ) { char r; bool typ; int nr, val; // cin >> r; scanf( " %c", &r ); typ = ( r == 'D' ); // cin >> val >> nr; scanf( "%d%d", &val, &nr ); evs.eb( typ, nr, val, i ); } foo( 0, (int)evs.size() - 1 ); for ( int i = 0; i < evs.size(); ++i ) if ( evs[i].typ ) { // cout << ( odp[i] == INT_MAX? -1 : odp[i] ) << '\n'; printf("%d\n", ( odp[i] == INT_MAX? -1 : odp[i] ) ); } }

Compilation message (stderr)

deda.cpp: In function 'int main()':
deda.cpp:78:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for ( int i = 0; i < evs.size(); ++i )
                     ^
deda.cpp:64:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf( "%d%d", &n, &q );
                         ^
deda.cpp:71:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf( " %c", &r );
                     ^
deda.cpp:74:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf( "%d%d", &val, &nr );
                             ^
#Verdict Execution timeMemoryGrader output
Fetching results...