➤ Problem Link : 1257D. Yet Another Monster Killing Problem
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int int main() { int t; cin>>t; while(t--) { ll n,m,p,s; cin>>n; ll monster[n]; for(int i=0;i<n;i++) cin>>monster[i]; cin>>m; map<ll,ll> maxEnd; for(int i=0;i<m;i++) { cin>>p>>s; if(maxEnd.find(p)==maxEnd.end()) maxEnd[p]=s; else maxEnd[p]=max(maxEnd[p],s); } auto it=maxEnd.end(); it--; ll maxi=(*it).second; for(;it!=maxEnd.begin();it--) { if(maxi>(*it).second) (*it).second=maxi; else maxi=(*it).second; } (*it).second=max((*it).second,maxi); /* for(auto s: maxEnd) cout<<s.first<<" "<<s.second<<endl;*/ ll i=0,j=0; ll ans=0; bool flag=0; while(i<n) { j=i; ll mx=-1; while(j<n) { mx=max(mx,monster[j]); auto itr=maxEnd.lower_bound(mx); if(itr==maxEnd.end()) { flag=1; break; } if((*itr).second >= j-i+1) { j++; } else break; } if(flag) break; ans++; i=j; } if(flag) cout<<"-1\n"; else cout<<ans<<"\n"; } }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!