首页 > 其他分享 >Ynoi 大分块系列

Ynoi 大分块系列

时间:2024-02-28 22:16:18浏览次数:24  
标签:系列 分块 值域 复杂度 查集 Ynoi 查询 区间

最初分块

先考虑怎么用分块维护区间第 \(k\) 小。

首先肯定想到二分区间第 \(k\) 小,然后查询区间有多少个数小于等于 \(x\)。

但这样时间复杂度是 \(\operatorname{O}(n\sqrt{n}\log^2 n)\) 的,无法通过此题。

考虑这样一个事情,我们可以暴力枚举区间第 \(k\) 小,然后查询区间内有多少个数小于 \(x\),但这样复杂度更高。

不如先将查询区间有多少个数小于 \(x\) 的复杂度降到 \(\sqrt{n}\),直接对于每个块内的数再次进行值域分块,然后对值域分块的信息做一遍前缀和。
这样子对于整块就可以 \(\operatorname{O}(1)\) 查询,然后对于散块暴力统计,时间复杂度 \(\operatorname{O}(n\sqrt{n})\)。

然后值域分块之后就可以先枚举答案在那个块内,再在那个块内枚举具体是那个数即可。

然后考虑修改。

不难发现,可以用一个类似并查集的东西记录每个数当前被并到了那个数,查询散块的时候直接把每个数找到其所并到的那个数,然后统计。

由于修改时不是整体修改,所以需要对每个块单独维护一个并查集。

为了方便并查集的维护,可以把每个块内一个值的并查集的根设为该数在该块内出现的第一个位置。

在合并值域 \(x\),\(y\) 时,如果 \(y\) 不存在就直接把 \(y\) 的根改成 \(x\) 的根,否则直接把 \(x\) 的根改成 \(y\) 的根即可。

注意,因为值域分块做了前缀和,所以要记录前缀代价,然后对每个块进行操作。

code

标签:系列,分块,值域,复杂度,查集,Ynoi,查询,区间
From: https://www.cnblogs.com/caoshurui/p/18042061

相关文章

  • FastAPI系列:HttpBasic基本认证
    HttpBasic基本认证fromfastapiimportFastAPI,Dependsfromfastapi.securityimportHTTPBasic,HTTPBasicCredentialsfromfastapi.exceptionsimportHTTPExceptionfromfastapi.responsesimportPlainTextResponsefromstarlette.statusimportHTTP_401_UNAUTHORIZE......
  • FastAPI系列:jwt认证
    jwt认证1.头部Header,主要是对jwt元数据的描述{'alg':'HS256','typ':'JWT'}2.载荷playload,主要包含jwt信息需要传递的主体数据{'iss':'jack',#由jwt签发'sub':'jack',#该jwt面向的用户组,也称为主题......
  • FastAPI系列:异步redis
    aioredisofficialwebsiteInstallpipinstallaioredisConnecttoredisfromfastapiimportFastAPIimportaioredisapp=FastAPI()@app.on_event('startup')asyncdefstartup_event():#创建的是线程池对象,默认返回的结果为bytes类型,设置decode_responses表......
  • FastAPI系列:fastapi定制的数据库操作库sqlmodel
    官网sqlmodel安装#安装sqlmodel会自动安装pydantic和sqlalchemypipinstallsqlmodel使用#步骤1,创建sqlmodel引擎fromsqlmodelimportcreate_engine#driver://用户名:密码@ip/数据库engine=create_engine("mysql+mysqldb://root:123456@localhost/api")#步骤......
  • FastAPI系列:自定义认证
    fromtypingimportOptional,TuplefromfastapiimportFastAPI,RequestfrompydanticimportBaseModel#通过starlette.authentication导入AuthenticationBackendfromstarlette.authenticationimportAuthenticationBackend,AuthenticationError,AuthCredentials,S......
  • FastAPI系列:依赖注入
    函数式依赖项fromfastapiimportFastAPIfromfastapiimportQuery,Dependsfromfastapi.exceptionsimportHTTPExceptionapp=FastAPI()defusername_check(username:str=Query(...)):ifusername!='zhong':raiseHTTPException(status_code......
  • FastAPI系列:环境配置读取
    依赖包pipinstallpython-dotenv使用#.env文件ADMIN_EMAIL="[email protected]"APP_NAME="ChimichangApp"#config.pyfrompydantic_settingsimportBaseSettingsclassSettings(BaseSettings):app_name:str="AwesomeAPI"......
  • FastAPI系列:后台任务进程
    注:后台任务应附加到响应中,并且仅在发送响应后运行用于将单个后台任务添加到响应中fromfastapiimportFastAPIfromfastapi.responsesimportJSONResponsefromstarlette.backgroundimportBackgroundTaskfrompydanticimportBaseModelapp=FastAPI()classUser(B......
  • FastAPI系列:中间件
    中间件介绍中间件是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作装饰器版中间件1.必须使用装饰器@app.middleware("http"),且middleware_type必须为http2.中间件参数:request,call_next,且call_next它将接收request作为参数@app.middleware("h......
  • FastAPI系列:模型用法
    模型基本用法frompydanticimportBaseModelclassItem(BaseModel):#通过继承BaseModelname:strprice:floatis_offer:Union[bool,None]=None常用的模型属性和方法dict()#将数据模型的字段和值封装成字典json()#将数据模型的字段和值封装成json格......