Books Queries (codeforces 1066C)

模拟题

开一个容器进行模拟即可,注意容器设置初始大小不然容易re。设置两个指针l,r。把容器当作桶,每一个桶都有一个编号表示位置,左边进入那么就是编号为l,右边一样。然后l--或者r++,l=r=0的初始值,第一个元素为0,然后同时l--,r++

代码(cf上的题解)

#include <bits/stdc++.h>
using namespace std;
main()
{
    int n;
    cin>>n;
    deque<int> vec(300000);
    int l=0;int r=0;
    for(int i=0;i<n;i++)
    {
        string s;
        int id;
        cin>>s>>id;
        if(!i)
        {
            vec[id]=l;
            l--,r++;
        }
        else
        {
            if(s=="L")
            {
                vec[id]=l;
                l--;
            }
            if(s=="R")
            {
                vec[id]=r;
                r++;
            }
            if(s=="?")
            cout<<min(abs(vec[id]-l),abs(vec[id]-r))-1<<endl;
        }
    }
}

原文地址:https://www.cnblogs.com/baccano-acmer/p/9782686.html

时间: 2024-10-09 01:30:26

Books Queries (codeforces 1066C)的相关文章

Array Queries CodeForces - 797E

Array Queries CodeForces - 797E WATLERE之路: 很显然的一道dp题,于是我妄想着通过时间O(n^2)的dp把它A掉,然后,我就走上了WATLERE之路..... 第一次,递归,RE 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int ans[100100]; 6 int a[100100]; 7 int n

Sum Queries? CodeForces - 1217E (线段树)

Sum Queries? CodeForces - 1217E (线段树) 题意: 定义一个集合为\(balanced\)的,当且仅当集合内数字之和的每个十进制位,都与集合中某个数该位相同.否则,称该集合为\(unbalanced\)的. 给定一个长度为\(n\)的序列,\(q\)次询问一个区间内数字之和最小的\(unbalanced\)集合,输出数字之和.若没有输出\(-1\). \(n,q<=200000\). 题解: 可以发现,如果存在\(unbalanced\)集合,那么最小的一定是只两

Tree and Queries CodeForces - 375D 树上莫队

http://codeforces.com/problemset/problem/375/D 树莫队就是把树用dfs序变成线性的数组. (原数组要根据dfs的顺序来变化) 然后和莫队一样的区间询问. 这题和普通莫队有点区别,他需要的不单单是统计区间元素种类个数,是区间元素种类个数 >= k[i]的个数. 考虑最简单的用bit维护,复杂度多了个log 观察到每次只需要 + 1  或者 -1 用一个数组sum[k]表示种类数大于等于k的ans 在numc[val]++之后,sum[numc[val]

[CF1066C]Books Queries

题目大意:维护一个数列,要求在左边插入一个数,在右边插入一个数,查询一个数的排名 题解:可以双指针,开个数组存每个数的位置 卡点:无 C++ Code: #include <cstdio> #define maxn 200010 int n, l, r = 1; int ret[maxn]; inline int min(int a, int b) {return a < b ? a : b;} int main() { scanf("%d", &n); wh

Mass Change Queries CodeForces - 911G (线段树合并)

链接 大意: 给定序列, 每次操作将区间[l,r]中的x全改为y, 最后输出序列 权值范围比较小, 对每个权值开一颗线段树, 每次将x合并到y上即可 #include <iostream> #include <algorithm> #include <cstdio> #define REP(i,a,n) for(int i=a;i<=n;++i) #define mid (l+r>>1) #define lc (o<<1) #define

Codeforces Round #515 (Div. 3)

Codeforces Round #515 (Div. 3) 1 #include<bits/stdc++.h> 2 #include<iostream> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cstring> 6 #include<cmath> 7 #include<algorithm> 8 #include<queue> 9 #include&l

CF1066 A &amp; B &amp; C

A 题目链接CF1066 A Vova and Train 思路: 类似前缀和暴力搞一下 code: #include <bits/stdc++.h> using namespace std; int T, L, V, l, r; template <typename T> inline void read(T &t) { ; } int main() { scanf("%d", &T); while(T--) { int ans = 0; sc

CSUST 8.5 早训

## Problem A A - Meeting of Old Friends CodeForces - 714A 题意: 解题说明:此题其实是求两段区间的交集,注意要去除掉交集中的某个点. 题解: C++版本一 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cmath> int m

CSUST 8.4 早训

## Problem A A - Memory and Crow CodeForces - 712A 题意: 分析可得bi=ai+ai+1 题解: 分析可得bi=ai+ai+1 C++版本一 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 7; int a[maxn]; int main(int argc, char const *argv[]) { int n; cin >> n ; for(