제출 #268576

#제출 시각아이디문제언어결과실행 시간메모리
268576stefantagaQueue (CEOI06_queue)C++14
0 / 100
733 ms5348 KiB
#include <bits/stdc++.h>

using namespace std;
map <int,int> m;
map <int,pair<int,int> > m1;
int nr,i,n,q;
struct wow
{
    int x,y;
}v[50005];
struct query
{
    int poz;char tip;
}query[50005];
int q1,valori[50005];
int pozitie (int x)
{
    int st,dr,mij,sol=0;
    if (m1.find(x)!=m1.end())
    {
        sol=m1[x].second;
        st=m1[x].second+1;
        dr=q1;
        while (st<=dr)
        {
            mij=(st+dr)/2;
            if (m1[x].first>=mij)
            {
                sol=mij;
                st=mij+1;
            }
            else
            {
                dr=mij-1;
            }
        }
        m1[x].first+=sol-m1[x].second;
        return m1[x].first;
    }
    st=1;
    dr=q1;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (valori[mij]<=x)
        {
            sol=mij;
            st=mij+1;
        }
        else
        {
            dr=mij-1;
        }
    }
    return x+sol;
}
void insereaza (int val1)
{
    int st=1,dr=q1,mij,sol=0,i;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (valori[val1]>=mij)
        {
            sol=mij;
            st=mij+1;
        }
        else
        {
            dr=mij-1;
        }
    }
    q1++;
    for (i=q1;i>sol+1;i--)
    {
        valori[i]=valori[i-1];
    }
    valori[sol+1]=val1;
}
int pozitie1;
int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(0);
    #ifdef HOME
    ifstream cin("queue.in");
    ofstream cout("queue.out");
    #endif // HOME
    cin>>n;
    for (i=1;i<=n;i++)
    {
        cin>>v[i].x>>v[i].y;
        pozitie1=pozitie(v[i].y);
        insereaza(pozitie1);
        m1[v[i].x]={pozitie1,i};
        m[v[i].x]=1;
        m[v[i].y]=1;
    }
    cin>>q;
    for (i=1;i<=q;i++)
    {
        cin>>query[i].tip>>query[i].poz;
        if (query[i].tip=='P')
        {
            cout<<pozitie(query[i].poz)<<'\n';
        }
        else
        {
            cout<<"1"<<'\n';
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...