首页 > 其他分享 >分块=-=优雅的暴力=-=中位数模版

分块=-=优雅的暴力=-=中位数模版

时间:2024-05-03 09:55:05浏览次数:15  
标签:val 分块 int 模版 中位数 long && siz mx

#include<bits/stdc++.h>
//#define int long long
#define ll long long
#define fd(i,a,b) for(register int i=a;i<=b;i=-~i)
#define bd(i,a,b) for(register int i=a;i>=b;i=~-i)
using namespace std;

const int N=1e5+509,M=509,MOD=10007;
int n,siz,id;
int bel[N],a[N];
int sum[M],add[M],L[M],R[M],cnt[70005],val[N],f[M][M];
unordered_map<int,int> mp;
vector<int> ve[N];

inline int read()
{
    int num=0; bool flag=1; char c=getchar();
    while(!isdigit(c)){if(c=='-') flag=0;c=getchar();}
	while(isdigit(c)){num=(num<<1)+(num<<3)+(c-'0');c=getchar();}
    return flag?num:-num;
}

inline void write(int x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
	putchar((x%10)^48);
}

namespace FJ
{
	
	void build(int len)
	{
	    siz=sqrt(len);
		fd(i,1,siz)
		{
			L[i]=(i-1)*siz+1;
			R[i]=i*siz;
		}
		if(R[siz]<len)
		{
	        ++siz;
	        L[siz]=R[siz-1]+1;
	        R[siz]=n;
	    }
	    fd(i,1,siz)
		{
	        fd(j,L[i],R[i])
			{
	            bel[j]=i;
	        }
	    }
	    fd(i,1,siz)
	    {
	    	memset(cnt,0,sizeof(cnt));
		    int mx=0,ans=0;
		    fd(j,L[i],n)
		    {       
		        cnt[a[j]]=-~cnt[a[j]];
		        if(cnt[a[j]]>mx||((cnt[a[j]]==mx&&val[a[j]]<val[ans])))
		            ans=a[j],mx=cnt[a[j]];
		        f[i][bel[j]]=ans;
		    }
		}
	}
	
	int query(int l,int r,int x)
	{
		int t=upper_bound(ve[x].begin(),ve[x].end(),r)-lower_bound(ve[x].begin(),ve[x].end(),l);
    	return t;
	}
	
	int ask(int l,int r)
	{
	    int p=bel[l],q=bel[r];
	    int res=0,mx=0;
	    res=f[bel[l]+1][bel[r]-1];
	    mx=query(l,r,res);
	    if(p==q)
	    {
	    	fd(i,l,r)
	    	{
	    		int t=query(l,r,a[i]);
        		if(t>mx||(t==mx&&val[a[i]]<val[res])) res=a[i],mx=t;
			}
			return res;
		}
		fd(i,l,R[p])
		{
			int t=query(l,r,a[i]);
        	if(t>mx||(t==mx&&val[a[i]]<val[res])) res=a[i],mx=t;
		}
		fd(i,L[q],r)
		{
			int t=query(l,r,a[i]);
        	if(t>mx||((t==mx&&val[a[i]]<val[res]))) res=a[i],mx=t;
		}
		return res;
	}
	
}

signed main()
{
// 	freopen("A.in","r",stdin);
//	freopen("A.out","w",stdout);
//	#ifdef FJ
//	ios::sync_with_stdio(0);
//	cin.tie(0); cout.tie(0);
//	#endif
	n=read();
	fd(i,1,n)
	{
		a[i]=read();
		if(!mp[a[i]])
        {
            mp[a[i]]=++id;
            val[id]=a[i];
        }
        a[i]=mp[a[i]];
        ve[a[i]].push_back(i);
	}
	FJ::build(n);
	fd(i,1,n)
	{
		int opt,a,b,c;
		a=read();b=read();//c=read();
		write(val[FJ::ask(a,b)]),puts("");
	}
	return 0;
}

标签:val,分块,int,模版,中位数,long,&&,siz,mx
From: https://www.cnblogs.com/whrwlx/p/18170953

相关文章

  • CF EDU164-E-数论分块
    link:https://codeforces.com/contest/1954/problem/E有一排怪物,第\(i\)只有\(a_i\)的血,每次攻击可以选择在\(i\)处放一个技能,技能会一直向左/右以相同的\(k\)点伤害扩散,直至遇到边界或已经死亡的怪物。问最少需要放几次技能?需要对所有\(k\)回答答案。\(n,a_i\leq10^......
  • 欧拉函数 整除分块 扩展欧几里得
    欧拉函数\(\varphi(x)\)表示求出\(1\ley\lex,\gcd(x,y)=1\)的\(y\)的数量。对于一个质数\(p\),\(\varphi(p)=p-1\)\(\varphi(p^2)=p^2-\frac{p^2}{p}=p^2-p\)\(\dots\)\(\varphi(p^i)=p^i-p^{i-1}=(p-1)\cdotp^{i-1}\)......
  • verilog 状态机模版
    定义所有状态参数localparamIDLE=3'b000;localparamBOF=3'b001;localparamFIND=3'b010;localparamCHANGE=3'b011;localparamERROR=3'b100;localparamEOF=3'b101;always@(posedgeI_sys_clkor......
  • 「笔记」对顶堆动态维护中位数
    目录写在前面问题思路代码例题写在最后写在前面妈的为啥我不会这个问题给定\(n\)次操作,要求动态地维护一个可重集合,每次操作为下列三种形式之一:给定参数\(x\),向集合中插入一个权值\(x\)。给定参数\(x\),删除集合中已存在的一个权值\(x\)。查询集合的中位数。要求......
  • 【vue3入门】-【17】模版引用
    模版引用虽然Vue的声明性渲染模型抽象了大部分的DOM的直接操作,但在某些情况下,我们仍然需要直接访问底层DOM元素。要实现这一点,我们可以使用特殊的refattribute挂载结束后引用都会被暴露在this.$refs只上,从this.$refs中按照js原生方法获取元素属性或变更元素属性<template>......
  • ETLCloud平台组件模版的使用技巧
    ETL工具介绍在ETLCloud平台中配备了各种不同的组件、模板、规则,用户可运用不同类型的组件来实现想要的业务流程。接下来直接进入平台组件模板的使用技巧说明吧。使用技巧1.组件复制平时在使用的时候,如果遇到要用到一个组件,需要再来个相同组件时,可以通过右键组件复制一个,里面......
  • 如何使用 SFDX CLI 拉取存储在 Public 文件夹的邮件模版(How to retrieve an email tem
    SELECTDeveloperName,FolderName,IsActiveFROMEmailTemplateSELECTDeveloperName,Folder.DeveloperName,IsActiveFROMEmailTemplate使用下面的命令可以正确获取到public文件夹下的邮件模版sfdxforce:source:retrieve-mEmailTemplate:unfiled\$public\/My_te......
  • Bootstrip HTML 查询搜索常用格式模版
    BootstripHTML查询搜索常用格式模版<formclass="form-inlinemy-3d-flexalign-items-centerjustify-content-start"method="get"action="{%url'repair:repair_unaccepted'%}"><divclass="form-groupmr-2fle......
  • 分块莫队——维护队列
    题目描述样例输入2312Q12R12Q12样例输出21题目分析首先它是一个离线莫队(在线超时QAQ)离线首先存下它所有的询问和修改,分别存,询问要存下是第几次,以便后续输出,还要存下时间是第几个命令,比较询问和修改的时间,相应的变换颜色,最后整体输出#include<bits/stdc++.h>......
  • 界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v23.2版本了,新版本正式支持.NET8、拥......