• sdut 迷之容器(线段树+离散化)


    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <stdio.h>
    #define N 100010
    using namespace std;
    int n,tt,le;
    char a[N][3];
    int m[N],X[N];
    struct node
    {
        int l,r,w;
    } q[4*N];
    void pushup(int rt)
    {
        q[rt].w=q[rt<<1].w+q[rt<<1|1].w;
    }
    void build(int l,int r,int rt)
    {
        q[rt].l=l;
        q[rt].r=r;
        q[rt].w=0;
        if(l==r) return ;
        int mid=(l+r)>>1;
        build(l,mid,rt<<1);
        build(mid+1,r,rt<<1|1);
    }
    void update(int l,int r,int rt,int key)
    {
        if(l==r&&r==key)
        {
            q[rt].w=1;
            return ;
        }
        int mid=(l+r)>>1;
        if(key<=mid) update(l,mid,rt<<1,key);
        else update(mid+1,r,rt<<1|1,key);
        pushup(rt);
        return ;
    }
    int query(int l,int r,int rt,int key)
    {
        if(l==r)
        {
            return l;
        }
        int mid=(l+r)>>1;
        if(key<=q[rt<<1].w) return query(l,mid,rt<<1,key);
        else return query(mid+1,r,rt<<1|1,key-q[rt<<1].w);
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            tt=0;
            for(int i=0; i<n; i++)
            {
                scanf("%s%d",a[i],&m[i]);
                if(a[i][0]=='P')
                {
                    X[tt++]=m[i];
                }
            }
            sort(X,X+tt);
            int sum=unique(X,X+tt)-X;
            build(1,sum,1);
            for(int i=0; i<n; i++)
            {
                if(a[i][0]=='P')
                {
                    le=lower_bound(X,X+sum,m[i])-X+1;
                    update(1,sum,1,le);
                }
                else if(a[i][0]=='Q')
                {
                    if(q[1].w<m[i])
                    {
                        printf("-1
    ");
                    }
                    else
                    {
                        int tt=query(1,sum,1,m[i]);
                        printf("%d
    ",X[tt-1]);
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    举重若轻是一种大气的生活态度
    论自我发展与自我职场生存
    ASP.Net与IIS原理粗浅的理解
    Net反射效率(转载)
    MVC技术
    单件模式 多线程
    公司的机票返利项目总结
    JS调用google地图
    System.Runtime.Serialization报错查找
    信息采集
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/4154218.html
Copyright © 2020-2023  润新知