码迷,mamicode.com
首页 > 编程语言 > 详细

CF1066CBooks Queries(数组的特殊处理)

时间:2018-10-18 00:54:12      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:color   def   min   元素   输入输出   char   大小   映射   names   

题意描述

您需要维护一个数据结构,支持以下三种操作:

  • L id:在现在序列的左边插一个编号为id的物品
  • R id:在现在序列的右边插一个编号为id的物品
  • ? id:查询该点左面有几个元素,右面有几个元素,并取min输出

输入输出格式:

输入格式:

第一行,一个整数q,表示操作数

下面q行,每行2个数,表示一个操作

输出格式

对于每个“?”操作,输出一行一个整数,表示答案

思路:

差点暴力上treap

水题一道

因为只有100000个数,所以我们可以维护一个大小为200000的数组以及lll,rrr两个指针

第一个数放在100000这个位置,每次往左放就l--,反之r++

把数填进去,同时写一个映射,将ididid映射为位置

当前位置−l-ll为左面的数的数量,r−r-r−当前位置为右面的数的数量

然后输出即可

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
using namespace std;
int l,r,now,ys[200005];
int q;
int main()
{
    scanf("%d\n",&q);
    for(rii=1;i<=q;i++)
    {
        char cz;
        int id;
        scanf("%c%d\n",&cz,&id);
        if(i==1)
        {
            ys[id]=100000;
            l=100000;
            r=100000;
            continue;
        }
        if(cz==L)
        {
            l--;
            ys[id]=l;
        }
        if(cz==R)
        {
            r++;
            ys[id]=r;
        }
        if(cz==?)
        {
            printf("%d\n",min(ys[id]-l,r-ys[id]));
        }
    }
}

 

CF1066CBooks Queries(数组的特殊处理)

标签:color   def   min   元素   输入输出   char   大小   映射   names   

原文地址:https://www.cnblogs.com/ztz11/p/9807537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!