题目大意

给定长为$n$的序列$A$,定义长为$k$的区间中位数为从小到大排完序后第$\lfloor\frac{k}{2}\rfloor$个数的大小。

每次询问给定$l_1,r_1,l_2,r_2$有多少个子区间满足中位数$\in[l_1,r_1]$长度$\in[l_2,r_2]$。

询问不超过五组。

题解

将问题提转化成中位数$\leq K$,长度$\in [l,r]$的子区件有多少个,答案相减即为最终答案。

发现对于每一个$A_i$,若子区间内$A_i\leq K$的数量至少达到区间长度的一半即可。

那么将$A_i\leq K$看做$1$,否则看做$-1$,求区间和$\geq 0$,区间长度$\in [l,r]$的数量即可。

这个只需要用主席树或者删电加点的树状数组维护即可。

复杂度$O(2nm\log n)$。

#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<x
#define sp <<" "
#define el <<endl
#define LL long long
#define M 100020
using namespace std;
int read(){
int nm=0,fh=1; char cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
int s[M],n,m,p[M],cnt,rt[M],bf[M<<2],nt[M<<2],c[M<<2];
void ins(int pos,int dt){for(int k=pos;k<(M<<1);k=nt[k]) c[k]+=dt;}
int qry(int pos){int tt=0;for(int k=pos;k;k=bf[k]) tt+=c[k];return tt;}
LL solve(int Mid,int Min_len,int Max_len){
LL res=0;
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++){
s[i]=(p[i]<=Mid?s[i-1]+1:s[i-1]-1);
int t1=i-Max_len-1,t2=i-Min_len;
if(t1>=0) ins(s[t1]+M,-1);
if(t2>=0) ins(s[t2]+M,1); res+=qry(s[i]+M);
}return res;
}
int main(){
n=read();
for(int i=1;i<(M<<2);i++) bf[i]=i-(i&-i),nt[i]=i+(i&-i);
for(int i=1;i<=n;i++) p[i]=read();
for(int T=read();T;--T){
int l1=read(),r1=read(),l2=read(),r2=read();
printf("%lld\n",solve(r1,l2,r2)-solve(l1-1,l2,r2));
}
return 0;
}

NOIP模拟题 序列的更多相关文章

  1. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  2. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  3. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  4. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  5. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

  6. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  7. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 12  Solved: 9[Submit][Status][Web Boar ...

  8. NOIP 模拟题

    目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...

  9. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

随机推荐

  1. hadoop07---synchronized,lock

    synchronized 锁是jvm控制的,控制锁住的代码块只能有一个线程进入.线程执行完了锁自动释放,抛出异常jvm会释放锁. synchronized的缺陷 1.如果一个线程被阻塞了,其余的线程 ...

  2. Linux设备驱动程序加载/卸载方法 insmod和modprobe命令

    linux加载/卸载驱动有两种方法. 1.modprobe 注:在使用这个命令加载模块前先使用depmod -a命令生成modules.dep文件,该文件位于/lib/modules/$(uname ...

  3. OpenCL 学习step by step (5) 使用二维NDRange workgroup

    http://www.cnblogs.com/mikewolf2002/archive/2012/09/07/2675634.html 在本教程中,我们使用二维NDRange来设置workgroup, ...

  4. 给JSP应用提供JSTL支持(IntelliJ IDEA)

    ===========手动分割线===2018-12-26============================================= Maven项目直接添加如下依赖即可: <de ...

  5. COS-7设备管理

    操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行.   操作系 ...

  6. [UOJ210]寻找罪犯

    2-sat神题.. 告诉是2-sat我也完全想不到正解. 看了看题解其实一步步分析也不算很难 这个题首先是要围绕每个人是否是犯人和每句话是否是真话来思考 首先要明确的是: 1.好人不说谎话 2.说了谎 ...

  7. HTTP Message Handlers in ASP.NET Web API

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers A message ha ...

  8. TWX 比较好的多线程使用实例

    using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Configuration;using ...

  9. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  10. JDK_如何查看安装的jdk是32位还是64位?

    1. 1.1.32位系统只能装 32位 jdk 1.2.64位系统,安装的 32位JDK 和 64位JDK 是不同的目录 1.2.1.32位的路径 类似:C:\Program Files (x86)\ ...