Buongiorno, sto provando a risolvere Pesca Bizzarra, ma il programma dà giusto solo il caso di esempio. L’idea che uso è la stessa descritta in (Pesca bizzarra), ma la mia implementazione, che allego sotto, utilizza delle priority_queue invece di sortare gli array. Qualcuno riesce ad aiutarmi? Grazie
int p,pi,pj,ai,aj;
pair<int,int> qp[1000010];
vector<int> bs;
vector<int> bd;
priority_queue<pair<int,int> > qx;
priority_queue<pair<int,int> > qy;
int main(){
cin>>p;
int tot=p;
cin>>pi>>pj;
for(int i=0;i<p;i++){
cin>>qp[i].first>>qp[i].second;
}
int x=pi,y=pj;
for(int i=0;i<2;i++){
string t; cin>>t;
bool f=1;
if(t[0]=='-')f=0;
while(t!="0"){
if(f){
if(t[0]=='+')bs.push_back(t[1]-48);
else bs.push_back(-(t[1]-48));
}
else{
if(t[0]=='+')bd.push_back(t[1]-48);
else bd.push_back(-(t[1]-48));
}
if(t[0]=='+')y+=t[1]-48;
else x+=t[1]-48;
cin>>t;
}
if(i==0){
ai=x; aj=y;
}
}
for(int i=0;i<p;i++){
if(qp[i].first<pi||qp[i].first>ai||qp[i].second<pj||qp[i].second>aj)tot--;
else{
qx.push(make_pair(-qp[i].first,qp[i].second));
qy.push(make_pair(-qp[i].second,qp[i].first));
}
}
x=pi; y=pj;
for(int i=0;i<bs.size();i++){
if(bs[i]>0)y+=bs[i];
else{
x+=-bs[i];
while(!qx.empty()&&-qx.top().first<x){
if(qx.top().second>y)tot--;
qx.pop();
}
}
}
cout<<"esce ciclo"<<endl;
x=pi; y=pj;
for(int i=0;i<bd.size();i++){
if(bd[i]>0){
y+=bd[i];
while(!qy.empty()&&-qy.top().first<y){
if(qy.top().second>x)tot--;
qy.pop();
}
}
else{
x+=-bd[i];
}
}
cout<<tot;
}