Submission #1284958

#TimeUsernameProblemLanguageResultExecution timeMemory
1284958Faisal_SaqibGift Exchange (JOI24_ho_t4)C++20
50 / 100
2594 ms8312 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
int a[N],b[N],sz=0;
pair<int,int> tmp1[N],tmp[N];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    ll n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
    }
    ll q;
    cin>>q;
    while(q--)
    {
        ll l,r;
        cin>>l>>r;
        sz=0;
        set<pair<ll,ll>> tep;
        set<ll> rem;
        for(int i=l;i<=r;i++)
        {
            tep.insert({a[i],i});
            // tmp[++sz]=a[i];
            tmp1[++sz]={b[i],i};
        }
        // sort(tmp+1,tmp+sz+1);
        sort(tmp1+1,tmp1+sz+1);
        // int cur=2;
        bool pos=1;
        for(int i=sz;i>=1;i--)
        {
            auto it=tep.lower_bound({tmp1[i].first,-1});
            if(it!=end(tep) and it->second==tmp1[i].second)
            {
                it++;
            }
            // auto it1=
            if(it==end(tep))
            {
                auto it1=rem.lower_bound(tmp1[i].first);
                if(it1!=end(rem))
                {
                    rem.erase(it1);
                    continue;
                }
                pos=0;
                break;
            }
            int j=tmp1[i].second;
            if(tep.find({a[j],j})!=tep.end())
            {
                tep.erase({a[j],j});
                rem.insert(a[j]);
            }
            tep.erase(it);
        }
        // for(int i=1;i<=sz;i++)
        // {

        // }
        cout<<(pos?"Yes":"No")<<endl;
    }
}
// 5 3 6
// 1 2 4
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...