zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Java并发包线程池之ThreadPoolExecutor
    Java并发包之线程池概述
    Java同步数据结构之ConcurrentHashMap
    new 操作符
    javascript-类型转换
    javascript-引用类型
    JS-数组与伪数组
    SVG-JS操作
    SVG-变换
    SVG-标签
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/4154218.html
Copyright © 2011-2022 走看看