Submission #1065984

#TimeUsernameProblemLanguageResultExecution timeMemory
1065984BoomydayFire (BOI24_fire)C++17
100 / 100
1408 ms87260 KiB
// // Created by adavy on 8/19/2024. // #include <bits/stdc++.h> //#pragma GCC optimize("O3") using namespace std; using ll = long long; #define f first #define s second int main(){ ll N,M; cin >> N >> M; ll B = 25; set<ll> coords; vector<ll> s(N),e(N); for(int i=0;i<N;++i) { cin >> s[i] >> e[i]; coords.insert(s[i]); coords.insert(e[i]); } vector<ll> coords_v(coords.begin(),coords.end()); map<ll,ll> coords_ind; for(int i=0;i<coords_v.size();++i){ coords_ind[coords_v[i]] = i; } for(int i=0;i<N;++i){ s[i] = coords_ind[s[i]]; e[i] = coords_ind[e[i]]; } M = coords.size(); for(int i=0;i<N;++i){ if (e[i] < s[i]){ e[i] += M; } } // output starts and ends vector<vector<int>> best_next(N, vector<int>(B)); vector<pair<pair<int,int>,int>> sweep; // time, {0 open 1 close}, number for(int i=0;i<N;++i){ sweep.push_back({{s[i],0},i}); sweep.push_back({{e[i],1},i}); } sort(sweep.begin(),sweep.end()); multiset<pair<int,int>,greater<pair<int,int>>> open; // end, number for(auto&[state,ind]:sweep){ if (state.s == 0){ open.insert({e[ind],ind}); } else { best_next[ind][0] = open.begin()->s; open.erase({e[ind],ind}); } } for(int j=1;j<B;++j){ for(int i=0;i<N;++i){ best_next[i][j] = best_next[best_next[i][j-1]][j-1]; } } ll lo = 0, hi = 3*N; while (lo<hi){ bool is_good = false; ll mid = (lo+hi)/2; for(int i=0;i<N;++i){ ll cur = i; for(int j=0;j<B;++j){ if (mid & (1<<j)){ cur = best_next[cur][j]; } } if (e[cur] - s[i] >= M){ //cout << i << " " << cur << " " << mid << endl; is_good = true; break; } } if (is_good){ hi = mid; } else { lo = mid+1; } } if (hi == 3*N){ cout << -1 << endl; } else { cout << hi+1 << endl; } // output best nexts }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:27:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i=0;i<coords_v.size();++i){
      |                 ~^~~~~~~~~~~~~~~~
#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...