【bzoj4939】掉进兔子洞

Avellaneda & Stoikov’s market-making strategy AS模型的通俗理解篇(一) δa, δb = bid/ask spread, symmetrical → δa=δb 也就是一段时间内,这个midprice 上蹿下跳的幅度计算,其实做市也就是一种网格,或者说类似布林带,我们经过计算在底部放买单,在高点放一个卖单,如果上下都成交了,那么仓位不变,你把利差赚了。一般来说在震荡行情中,很适合做市,特别是波动率不高情况下,我们通过AS的经典论文得到2个最关键公式,下面来解读一下这个公式的含义,如何在hummingbot 策略中如何设置这些参数。如果单边上涨,你就无货可卖,俗称卖飞了。 阅读详情

Time Limit: 80 Sec Memory Limit: 512 MB

Description

一个长为 n 的序列 a。 有 m
个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。
注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完, 比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2 个 3。

Input

第一行两个数表示 n , m。 第二行 n个数表示 a[i]。
之后 m 行,每行 6 个数 l1 , r1 , l2, r2 , l3 ,r3 表示这三个区间。

Output

对于每个询问,输出一个数表示答案。

Sample Input

5 2
1 2 2 3 3
1 2 2 3 3 4
1 5 1 5 1 5

Sample Output

3
0

HINT

n , m <= 100000 , 1 <= a[i] <= 1000000000

Solution

由题意,对于每个询问,我们要求的答案为

∑i=13(ri−li+1)−3∗∑i=1Maxmin(cnt1[i],cnt2[i],cnt3[i])∑i=13(ri−li+1)−3∗∑i=1Maxmin(cnt1[i],cnt2[i],cnt3[i])
前半部分很容易,难点在于后半部分的计算。a[i]a[i]可能很大,因此需对a[i]a[i]进行离散化处理。
求一段区间内各数字出现的次数是莫队算法的经典问题。对于本题,我们把一个询问的三个区间拆开解决,最后再合并起来。每次合并都是O(n)O(n)的复杂度,不优秀,这里我们使用bitsetbitset优化,记录cntcnt。注意到数字可能重复出现,而bitsetbitset只能记录0和1,因此在离散化前不能有去重操作。例如对样例数据:1 2 2 3 3 ,离散化后应为:1 2 2 4 4,在bitsetbitset中用第2位表示出现的第1个2,第3位表示第二个2,以此类推。
但这样会MLE,于是我们强行把询问分组,每25000个为一组,分批求解,解决了空间不足的问题。

Code

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<bitset>
#include<cmath>
using namespace std;
const int maxn=1e5+5;
const int T=25000;
int n,m,l,r,tot,siz,a[maxn],b[maxn],bl[maxn],ans[maxn],cnt[maxn];
int l1[maxn],r1[maxn],l2[maxn],r2[maxn],l3[maxn],r3[maxn];
bool flag[T+5];
bitset<maxn> f[T+5],temp;
struct node
{
    int id,tl,tr;
    node(){}
    node(int id,int tl,int tr):id(id),tl(tl),tr(tr){}
}q[maxn];
bool cmp(node x,node y)
{
    return bl[x.tl]==bl[y.tl]?x.tr<y.tr:bl[x.tl]<bl[y.tl];
}
void modify(int x,int y)
{
    x=a[x];
    if(y<0) temp[x+cnt[x]-1]=0;
    if(y>0) temp[x+cnt[x]]=1;
    cnt[x]+=y; 
}
void Solve(int x,int y)
{
    memset(cnt,0,sizeof(cnt)),tot=0,temp.reset();
    memset(flag,false,sizeof(flag)),l=1,r=0;
    for(int i=x;i<=y;i++)
    {
        q[++tot]=node(i,l1[i],r1[i]),ans[i]+=r1[i]-l1[i]+1;
        q[++tot]=node(i,l2[i],r2[i]),ans[i]+=r2[i]-l2[i]+1;
        q[++tot]=node(i,l3[i],r3[i]),ans[i]+=r3[i]-l3[i]+1;
    }
    sort(q+1,q+1+tot,cmp);
    for(int i=1;i<=tot;i++)
    {
        while(r<q[i].tr) modify(r+1,1),r++;
        while(l>q[i].tl) modify(l-1,1),l--;
        while(r>q[i].tr) modify(r,-1),r--;
        while(l<q[i].tl) modify(l,-1),l++;
        if(!flag[q[i].id-x+1]) flag[q[i].id-x+1]=true,f[q[i].id-x+1]=temp;
        else f[q[i].id-x+1]&=temp;
    }
    for(int i=x;i<=y;i++) ans[i]-=f[i-x+1].count()*3;
}
int main()
{
    scanf("%d%d",&n,&m),siz=sqrt(n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]),b[i]=a[i];
        bl[i]=(i-1)/siz+1;
    }
    sort(b+1,b+1+n);
    for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+n,a[i])-b;
    for(int i=1;i<=m;i++) scanf("%d%d%d%d%d%d",&l1[i],&r1[i],&l2[i],&r2[i],&l3[i],&r3[i]);
    for(int i=1;i<=m;i+=T) Solve(i,min(m,i+T-1));
    for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
    return 0;
}

西门子1500T系列凸轮同步(CAMIN指令用法) 添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。 阅读详情

相关推荐

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1330

4939: [Ynoi2016]掉进兔子洞

挺好的一道题。。到时看了题解感觉并不难

OZY的博客 845

WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化

判断需要提取的变量与诊断量确定后,使用getvar函数进行提取。可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。判断绘图类型所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。1D点线图:ll_to_xy interpline2D填色图:interplevel3D剖面图:vinterp vertcross绘图、美化色标、XY轴、标签的设置等等。

weixin_43750300的博客 1万+

【bzoj4939】【YNOI2016】掉进兔子洞(莫队)

题目描述 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为n的序列a。 有m个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。 注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间是[1,2,2,3,3,3,3], [1,2,2,3,3,3,3]与 [1,1,...

weixin_33840661的博客 92

vCenter Server出现no healthy upstream的解决方法

可以通过"VMware vCenter Server Management(服务)"来排查问题,在网页里面找到“服务”模块,会发现有很多服务没有启动起来,而且手动启动也无法启动。7.0 地址后,页面出现“no healthy upstream”,无法正常登录vCenter,重启后依旧如此,该故障的前提是没有对vCenter做过任何配置,如下图所示。于是用命令查询是否有证书过期,发现真有多个服务依赖的证书在当天早上过期。使用如下命令尝试打开服务发现不分服务可以打开,不分服务无法打开。

1万+

别再死记硬背了!用‘瞬时极性法’5分钟搞定三极管反馈电路类型判断

本文介绍了使用‘瞬时极性法’快速判断三极管反馈电路类型的高效技巧。通过假设输入信号变化并追踪传递路径,该方法能准确区分正负反馈、电压电流反馈、串联并联反馈及交直流反馈,避免传统死记硬背的弊端,显著提升电路分析效率。

weixin_42524708的博客 182

BZOJ 4939 (Ynoi 2016)掉进兔子洞(莫队+压位)

4939: [Ynoi2016]掉进兔子洞 Description 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为 n 的序列 a。 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。 注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完, 比如三个区间...

Mogician_Evian的博客 608

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

bzoj 4939: [Ynoi2016]掉进兔子洞 莫队算法+bitset

题意 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2 个 3。 n , m &lt;= 100000 , 1 &...

beginend 482

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 533

基于STM32设计的自动追光系统(项目资料ID:2)

基于STM32设计的自动追光系统主要由光敏采集电路、单片机核心板电路和步进电机控制电路构成。通过光敏电阻采集环境光强信息,经 STM32 单片机处理后,控制步进电机转动,实现对光源的自动追踪。该系统具有响应速度快、追踪精度较高等优点,可应用于太阳能发电、智能照明等领域,为相关场景提供高效的光资源利用方案。

以培养嵌入式工程师为己任 1万+

BZOJ4939: [Ynoi2016]掉进兔子洞

BZOJ 题意 给你一个长度为nnn的数列,每次询问三个区间共有的数的个数; 题解 对于这种求交或求并的问题,往往会先考虑到使用bitset,但是本题的数据范围太大需要离散化,且bitset无法记录数量,这里就只能在离散化的时候用一点小技巧了:对于重复出现的数我们不需要unique,假如某数第一次出现的编号为xxx,那么第二次出现它的编号就可以设为x+1x+1x+1,以此类推,对于这道题,每...

CIao_015的博客 279

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2423

bzoj4939: [Ynoi2016]掉进兔子洞 莫队 bitset

bzoj4939: [Ynoi2016]掉进兔子洞 Description 一个长为 n 的序列 a。 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。 注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完, 比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就...

maxtir的博客 234

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

bzoj 4939: [Ynoi2016]掉进兔子洞

有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。 注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完, 比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2 个 3。 Input 第一行两个...

weixin_30695195的博客 105

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【LOJ6201】【bzoj4939】【YNOI2016】掉进兔子洞

一道比较简单的莫队…… 用bitset维护三个区间的交元素。 #include<bits/stdc++.h> const int N=150010; const int wy=33334; #define UI unsigned int #define rep(i,_x,_y) for (register int i=(_x);i<=(_y);i++) ...

di679520024669的专栏 180

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

BZOJ4939 [YNOI2016]掉进兔子洞

题目蓝链 Solution 首先,很显然这题是要用莫队来处理的。我们先把输入的数字另外排一下序,然后记录一下\(p_i\)表示每一个数字对应在排好序的数列里面是排第几个。询问的时候要把一个询问拆成\(3\)个询问,然后再并起来。然后在莫队的时候记录\(cnt_i\)表示当前数字\(i\)出现的次数,再开一个\(bitset\),假设当前需要加入\(bitset\)的数字是\(x\),我们就令\(b...

weixin_30872337的博客 147

[bzoj 4939][Ynoi 2016]掉进兔子洞

传送门 Description 一个长为 n 的序列 a。 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。 注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完, 比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2...

weixin_34128534的博客 120

BZOJ 4939: [Ynoi2016]掉进兔子洞(莫队+bitset)

传送门 解题思路   刚开始想到了莫队+\(bitset\)去维护信息,结果发现空间不太够。。试了各种奇技淫巧都\(MLE\),最后\(\%\)了发题解发现似乎可以分段做。。这道题做法具体来说就是开\(3\)个\(bitset\),然后对原序列离散化之后给每个值规定一个开始的位置,之后就可以莫队搞,计算答案是用总的元素个数减去扔掉的,而扔掉的其实就是三个\(bitset\)做与运算后\(1\)的个...

weixin_30840573的博客 162

BZOJ4939[Ynoi2016]掉进兔子洞(莫队+bitset)

题目链接 BZOJ 洛谷 扯点别的 听说这是比较亲民的一道Ynoi,于是我就去摸了一下,于是一个晚上就没了……不过至少还是学到了\(bitset\)维护可重集合的方法,以及当空间开不下时分组处理询问的花操作…… 解析 大佬们说容易想到bitset,那就想到bitset吧…… 这种形如“几个集合共同含有的元素”的问题容易让人想\(bitset\)搞一搞,但是我们发现裸的\(bitset\)只能表示有...

weixin_30512089的博客 134

BZOJ4939 Ynoi2016掉进兔子洞(莫队+bitset)

  容易发现要求三个区间各数出现次数的最小值。考虑bitset,不去重离散化后and一发就可以了。于是莫队求出每个区间的bitset。注意空间开不下,做多次即可。输出的东西错了都能调一年服了我了。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

weixin_30559481的博客 142

【YNOI2016】【BZOJ4939】【LOJ6199】【洛谷P4688】掉进兔子洞(莫队)(bitset)

BZOJ传送门 LOJ传送门 洛谷传送门 代码: #include<bits/stdc++.h> #define ll long long #define re register #define gc getchar #define cs const namespace IO{ inline char get_char(){ static cs int Rlen=1<...

zxyoi_dreamer的博客(不定期诈尸) 314

BZOJ 4939 [Ynoi2016]掉进兔子洞(莫队+bitset)

【题目链接】http://www.lydsy.com/JudgeOnline/problem.php?id=4939 【题目大意】   给出一个数列,每个询问给出三个区间,问除去三个区间共有的数字外,   还剩下几个数字,注意删去的是共有的数字个数,不是数字种类,统计时候也一样 【题解】   首先,答案为区间长度和减去区间并数字个数和的三倍。   所以题目转...

weixin_30699955的博客 150
上一篇: 【bzoj4810】由乃的玉米田
下一篇: 【hdu5716】带可选字符的多字符串匹配
StrideTG
博客等级 码龄9年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值