思路:分治

提交:2次

错因:数组开小

题解:

我们枚举一下众数\(x\)。

设\(s[n]=\sum_{i=1}^n [a[i]==x]\)

那么对于区间\((l,r]\),有\(s[r]-s[l]>\frac{r-l}{2}\)

即\(2*s[r]-r>2*s[l]-l\)

考虑分治,我们求出所有过中点的区间\([l,r]\)的贡献。

如何求呢?首先观察一个性质,两个子区间的众数至少有1个是大区间的众数,反之亦然。

那么我们先求出子区间中的众数,作为大区间的可行众数。然后我们枚举每个可行众数,依次求出符合\(2*s[r]-r>2*s[l]-l\)的区间。

还有一个特别神的数组做法,可是我不会

代码:

#include<bits/stdc++.h>
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
} const int N=500010;
int n,a[N],pos[N],num[N],cnt[N*2]; ll ans;
inline void solve(int l,int r) {
if(l==r) {++ans; return ;} R md=l+r>>1,tot=0;
solve(l,md),solve(md+1,r);
for(R i=md;i>=l;--i) if(++cnt[a[i]]>(md-i+1)/2)
if(!pos[a[i]]) num[pos[a[i]]=++tot]=a[i];//左边的众数
for(R i=l;i<=r;++i) cnt[a[i]]=0;
for(R i=md+1;i<=r;++i) if(++cnt[a[i]]>(i-md)/2)
if(!pos[a[i]]) num[pos[a[i]]=++tot]=a[i];//右边的众数
for(R i=l;i<=r;++i) pos[a[i]]=0;
for(R i=l;i<=r;++i) cnt[a[i]]=0;
for(R i=1;i<=tot;++i) {//枚举可能的众数
R sum=r-l+1,mx=sum,mn=sum;//mn,mx记录桶的上下界,sum作为初值相当于偏移量
cnt[sum]=1; for(R j=l;j<md;++j) {//先处理出左边的桶
a[j]==num[i]?++sum:--sum;
mx=max(mx,sum),mn=min(mn,sum); ++cnt[sum];
} a[md]==num[i]?++sum:--sum;
for(R j=mn;j<=mx;++j) cnt[j]+=cnt[j-1];//前缀和。
for(R j=md+1;j<=r;++j) {//处理右边
a[j]==num[i]?++sum:--sum;
ans+=cnt[min(mx,sum-1)]; //求出顺序对个数
} for(R j=mn;j<=mx;++j) cnt[j]=0;
}
} inline void main() {
n=g(); g(); for(R i=1;i<=n;++i) a[i]=g();
solve(1,n); printf("%lld\n",ans);
}
} signed main() {Luitaryi::main(); return 0;}

2019.10.08

38

P4062 [Code+#1]Yazid 的新生舞会的更多相关文章

  1. luogu P4062 [Code+#1]Yazid 的新生舞会(线段树+套路)

    今天原来是平安夜啊 感觉这题是道好题. 一个套路枚举权值\(x\),把权值等于\(x\)的设为1,不等于的设为-1,然后问题转化为多少个区间权值和大于. 发现并不是很好做,还有一个套路,用前缀和查分来 ...

  2. 洛谷 P4062 - [Code+#1]Yazid 的新生舞会 的线性做法

    洛谷题面传送门 一个线性做法. \(n\log n\) 解法可以戳这里查看 首先回顾一下 \(n\log n\) 解法的过程:我们对于每一个数 \(x\),考察其出现位置,设为 \(t_1,t_2,t ...

  3. 洛谷 P4062 - [Code+#1]Yazid 的新生舞会(权值线段树)

    题面传送门 题意: 给出一个序列 \(a\),求 \(a\) 有多少个子区间 \([l,r]\),满足这个区间中出现次数最多的数出现次数 \(>\dfrac{r-l+1}{2}\) \(1 \l ...

  4. 【线段树】【P4062】 [Code+#1]Yazid 的新生舞会

    Description 给定一个长度为 \(n\) 的序列,求有多少子区间满足区间众数严格大于区间长度的一半.如果区间有多个出现次数最多且不同的数则取较小的数为众数. Limitation 对于全部的 ...

  5. [题解] [Code+#1]Yazid 的新生舞会

    题面 题解 upd : \(cnt_i\) 代表值为 \(i\) 的个数 我们可以暴力枚举众数 \(k\) 把等于 \(k\) 的赋值成 1 , 不等于 \(k\) 的赋值成 -1 这样原序列就变成了 ...

  6. 【BZOJ5110】[CodePlus2017]Yazid 的新生舞会 线段树

    [BZOJ5110][CodePlus2017]Yazid 的新生舞会 Description Yazid有一个长度为n的序列A,下标从1至n.显然地,这个序列共有n(n+1)/2个子区间.对于任意一 ...

  7. bzoj5110: [CodePlus2017]Yazid 的新生舞会

    Description Yazid有一个长度为n的序列A,下标从1至n.显然地,这个序列共有n(n+1)/2个子区间.对于任意一个子区间[l,r] ,如果该子区间内的众数在该子区间的出现次数严格大于( ...

  8. [loj 6253] Yazid的新生舞会

    (很久之前刷的题现在看起来十分陌生a) 题意: 给你一个长度为n的序列A,定义一个区间$[l,r]$是“新生舞会的”当且仅当该区间的众数次数严格大于$\frac{r-l+1}{2}$,求有多少子区间是 ...

  9. 【bzoj5110】Yazid的新生舞会

    这里是 $THUWC$ 选拔时间 模拟赛的时候犯 $SB$ 了,写了所有的部分分,然后直接跑过了 $4$ 个大样例(一个大样例是一个特殊情况)…… 我还以为我非常叼,部分分都写对了,于是就不管了…… ...

随机推荐

  1. python基础学习(七)

    14.return # print() 可以被执行 def doubelNumber(num): print() print() Afnum = doubelNumber() print(Afnum) ...

  2. java通过jasper文件生成jpg图片

    iReport资料紧俏,整理好就赶紧传上来: 工具类:JpgExport public class JpgExportUtil { public static String Export(Map< ...

  3. [C++] 非递归实现前中后序遍历二叉树

    目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...

  4. maven 打包成 .jar 文件执行:没有主清单属性错误

    报错原因是pom.xml配置文件中没有指定main入口信息,在pom.xml文件中添加如下代码: <build> <plugins> <plugin> <gr ...

  5. Android--图片剪裁

    调用系统Intent剪裁图片 /** * 调用系统Intent剪裁图片 * @param context * @param uri * @param w * @param h */ public st ...

  6. shiro与spring集成

    简介 Apache Shiro 是 Java 的一个安全(权限)框架.主要提供了认证.授权.加密和会话管理等功能. Authentication:身份认证/登录,验证用户是不是拥有相应的身份:Auth ...

  7. 0.b概述

    一.计算机与算法 计算 = 信息处理 计算模型 = 计算机 = 信息处理工具 算法:特定计算模型下,解决特定问题的指令序列  要素:输入 输出 正确性 确定性 可行性 有穷性 好算法:正确 健壮 可读 ...

  8. Flask基础原理

    一.Flask简介 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架. Werkzeug的本质是Socket服务端,用于接收http请求并对请 ...

  9. Fortify漏洞之XML External Entity Injection(XML实体注入)

    继续对Fortify的漏洞进行总结,本篇主要针对  XML External Entity Injection(XML实体注入) 的漏洞进行总结,如下: 1.1.产生原因: XML External ...

  10. 小数据玩转Pyspark(2)

    一.客户画像 客户画像应用:精准营销(精准预测.个性化推荐.联合营销):风险管控(高风险用户识别.异常用户识别.高可疑交易识别):运营优化(快速决策.产品组合优化.舆情分析.服务升级):业务创新(批量 ...