Submission #974182

#TimeUsernameProblemLanguageResultExecution timeMemory
974182vjudge1Fountain (eJOI20_fountain)C++17
100 / 100
327 ms29868 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long int main(){ ll n,q; cin>>n>>q; vector<pair<ll,ll>> problem(n+2); for(ll i=1; i<=n; i++){ ll u,v; cin>>u>>v; problem[i] = {u,v}; } vector<pair<ll,ll>> query(q+2); vector<ll> cari[n+2]; for(ll i=0; i<q; i++){ ll u,v; cin>>u>>v; query[i] = {u,v}; cari[u].push_back(v); } deque<ll> arr; deque<ll> suffix; map<pair<ll,ll>, ll> mp; for(ll i=n; 1<=i; i--){ while(!arr.empty() && problem[arr[0]].first <= problem[i].first){ arr.pop_front(); suffix.pop_front(); } arr.push_front(i); suffix.push_front(problem[i].second); if(suffix.size() != 1){ suffix[0] += suffix[1]; } if(cari[i].empty())continue; for(auto k : cari[i]){ if(suffix[0] <k){ mp[{i,k}] = 0; continue; }else if(k <= problem[i].second){ mp[{i,k}] = i; continue; } ll l=0,r=suffix.size()-1, mid, last=r; while(l <= r){ mid = l + (r-l)/2; ll tmp = suffix[0]; if(mid != suffix.size()-1){ tmp -= suffix[mid+1]; } if(k <= tmp){ //gak bisa r = mid - 1; last = mid; }else{ //bisa l = mid + 1; } } mp[{i,k}] = arr[last]; } } for(ll i=0; i<q; i++){ cout<<mp[query[i]]<<"\n"; } return 0; }

Compilation message (stderr)

fountain.cpp: In function 'int main()':
fountain.cpp:64:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::deque<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |     if(mid != suffix.size()-1){
      |        ~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...