Cod sursa(job #2568721)

Utilizator NashikAndrei Feodorov Nashik Data 4 martie 2020 09:36:02
Problema Nums Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
//#include <iostream>
#include <unordered_map>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("nums.in");
ofstream cout("nums.out");
unordered_map <string,int> um;
int n,aib[100005],solutie;
bool ms(string a,string b){
    if(a.size()!=b.size())
        return a.size()<b.size();
    int n=a.size();
    for(int i=0;i<n;i++){
        if(a[i]!=b[i]){
            return a[i]<b[i];
        }
    }
}
void upd(int a,int val){
    for(;a<=n;a+=(a&(-a))){
        aib[a]+=val;
    }
}
int que(int a){
    int sol=0;
    for(;a>=1;a-=(a&(-a))){
        sol+=aib[a];
    }
    return sol;
}
bool valid(int a,int kk){
    //cout<<que(a)<<"\n";
    if(que(a)>=kk)
        return true;
    return false;
}
void cb(int st,int dr,int a){
    if(st>dr)
        return;
    //cout<<st<<" "<<dr<<"\n";
    int mid=(st+dr)/2;
    //cout<<mid<<" ";
    if(valid(mid,a)==true){
        solutie=mid;
        cb(st,mid-1,a);
    }
    else
        cb(mid+1,dr,a);
}
int cer[100005],cont=0,k[100005];
string v[100005],f[100005];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>cer[i];
        cin.get();
        if(cer[i]==1){
            cin>>v[++cont];
            f[cont]=v[cont];
        }
        else
            cin>>k[i];
    }
    sort(f+1,f+cont+1,ms);
    /*for(int i=1;i<=cont;i++){
        um[f[i]]=i;
    }
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(cer[i]==1){
            ++cnt;
            //cout<<v[cnt]<<" "<<um[v[cnt]]<<"\n";
            upd(um[v[cnt]],1);
        }else{
            solutie=-1;
            //cout<<que()<<"\n";
            cb(1,n,k[i]);
            cout<<f[solutie]<<"\n";
        }
    }
    */
    return 0;
}