#include <iostream>
#include <vector>
#include <set>
using namespace std;
int getAns(vector<int>& d1, vector<int>& d2, set<int>& s) {
vector<int> dist1;
vector<int> dist2;
for(int i = 0; i < d1.size(); ++i) {
if(s.find(i) == s.end()) continue;
dist1.push_back(d1[i]);
dist2.push_back(d2[i]);
}
vector<int> prefix(dist1.size(),0);
prefix[0] = dist2[0];
for(int i = 1; i < prefix.size(); ++i) {
prefix[i] = min(prefix[i-1], dist2[i]);
}
vector<int> suffix(dist1.size(),0);
suffix[dist1.size()-1] = dist2[dist2.size()-1];
for(int i = suffix.size()-2; i >= 0; --i) {
suffix[i] = min(suffix[i+1], dist2[i]);
}
int ans =0;
for(int i = 0; i < dist1.size()-1; ++i) {
int suf = i < dist1.size()-1 ? suffix[i+1] : dist1.size() * dist1.size();
ans = max(ans, dist1[i] + suf);
}
return min(ans + 1, d1[d1.size()-1]);
}
int main() {
// your code goes here
vector<int> dist1 = {0,1,2,2,3};
vector<int> dist2 = {3,2,1,2,0};
set<int> s = {0,1,3};
cout << endl << getAns(dist1, dist2,s) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGdldEFucyh2ZWN0b3I8aW50PiYgZDEsIHZlY3RvcjxpbnQ+JiBkMiwgc2V0PGludD4mIHMpIHsKCQoJdmVjdG9yPGludD4gZGlzdDE7Cgl2ZWN0b3I8aW50PiBkaXN0MjsKCQoJZm9yKGludCBpID0gMDsgaSA8IGQxLnNpemUoKTsgKytpKSB7CgkJaWYocy5maW5kKGkpID09IHMuZW5kKCkpIGNvbnRpbnVlOwoJCWRpc3QxLnB1c2hfYmFjayhkMVtpXSk7CgkJZGlzdDIucHVzaF9iYWNrKGQyW2ldKTsKCX0KCQoJdmVjdG9yPGludD4gcHJlZml4KGRpc3QxLnNpemUoKSwwKTsKCXByZWZpeFswXSA9IGRpc3QyWzBdOwoJZm9yKGludCBpID0gMTsgaSA8IHByZWZpeC5zaXplKCk7ICsraSkgewoJCXByZWZpeFtpXSA9IG1pbihwcmVmaXhbaS0xXSwgZGlzdDJbaV0pOwoJfQoJCgkKCXZlY3RvcjxpbnQ+IHN1ZmZpeChkaXN0MS5zaXplKCksMCk7CglzdWZmaXhbZGlzdDEuc2l6ZSgpLTFdID0gZGlzdDJbZGlzdDIuc2l6ZSgpLTFdOwoJZm9yKGludCBpID0gc3VmZml4LnNpemUoKS0yOyBpID49IDA7IC0taSkgewoJCXN1ZmZpeFtpXSA9IG1pbihzdWZmaXhbaSsxXSwgZGlzdDJbaV0pOwoJfQoJCglpbnQgYW5zID0wOwoKCWZvcihpbnQgaSA9IDA7IGkgPCBkaXN0MS5zaXplKCktMTsgKytpKSB7CgkJaW50IHN1ZiA9IGkgPCBkaXN0MS5zaXplKCktMSA/IHN1ZmZpeFtpKzFdIDogZGlzdDEuc2l6ZSgpICogZGlzdDEuc2l6ZSgpOwoJCWFucyA9IG1heChhbnMsIGRpc3QxW2ldICsgc3VmKTsKCX0KCQoJcmV0dXJuIG1pbihhbnMgKyAxLCBkMVtkMS5zaXplKCktMV0pOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXZlY3RvcjxpbnQ+IGRpc3QxID0gezAsMSwyLDIsM307Cgl2ZWN0b3I8aW50PiBkaXN0MiA9IHszLDIsMSwyLDB9OwoJCglzZXQ8aW50PiBzID0gezAsMSwzfTsKCQoJY291dCA8PCBlbmRsIDw8IGdldEFucyhkaXN0MSwgZGlzdDIscykgPDwgZW5kbDsKCXJldHVybiAwOwp9