➤ Problem Link : 732D. Exams
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; vector<int> v,days; unordered_set<int> us; bool func(int d,int m) { us.clear(); if(d<m) return 0; int req=0; int avl=d-m; int i=d; int prev=-1; for(;i>0;i--) { while(i>0 && (v[i]==0 || us.find(v[i])!=us.end())) { i--; avl--; } if(prev!=-1) { int p=prev-i-1; req-=min(req,p); } if(i==0) break; us.insert(v[i]); req+=days[v[i]]; if(req>avl) return 0; prev=i; } if(req>avl) return 0; return 1; } int main() { int n,m,d,p; cin>>n>>m; v.clear(); days.clear(); v.push_back(-1); for(int i=1;i<=n;i++) { cin>>d; v.push_back(d); } days.push_back(0); for(int i=1;i<=m;i++) { cin>>p; days.push_back(p); } int low=0,high=n,mid; while(low<high) { mid=low+(high-low)/2; if(func(mid,m)) high=mid; else low=mid+1; } if(func(low,m)) cout<<low; else cout<<"-1"; }
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!!