首页 > 其他分享 >【笔记】学习笔记2022-12-31

【笔记】学习笔记2022-12-31

时间:2023-05-13 22:23:25浏览次数:44  
标签:lfloor 12 rfloor 分块 31 sqrt times 笔记

title: ' 学习笔记2022-12-31 '
date: 2022-12-31 14:00:03
tags:
  - '离散化'
  - 分块
  - 数论分块
  - 操作分块
  - 根号分治
categories:
  - 笔记
  - 学习笔记

2022-12-31

离散化

把值域很大的一组数映射到值域较小的一组数,相对关系不变

P3740 [HAOI2014]贴海报:记录线段的关键点(如左端点右端点中点)进行离散化,因为 \(M\) 很小,暴力 for 即可。

扫描线

扫描线引入:
P1496 火烧赤壁:(矩形面积并一维版本)记录左右端点,排序,把每个区间变成两个关键的事件。

P5490 【模板】扫描线:求矩形面积并。把一个矩形拆成在第 \(y_1\) 列开始产生 \((x_1,x_2)\) 贡献,第 \(y_2\) 列结束 \((x_1,x_2)\) 贡献,线段树维护当前的列上有哪些地方有贡献。

对于矩形面积并的应用:

UVA1608不无聊的序列 Non-boring sequences:对于每一个位置 \(i\),记录这个位置的数上一次和下一次出现的位置 \(pre\) 和 \(nxt\),则这个区间有唯一元素当且仅当左端点在 \((pre,i]\) 内,右端点在 \([i,nxt)\)。于是可以将其对应二维平面一个矩形。后做矩形面积并,判断是否整个平面被覆盖即可。

数论分块

简单来说,\(\lfloor\dfrac{n}{i}\rfloor\) 只有 \(O(\sqrt{n})\) 种取值。

P1403 [AHOI2005]约数研究(加强版UVA11526:考虑转换计数对象,考虑每个 \(i\) 是多少个数的因数,即问题转化为对 \(\lfloor\dfrac{n}{i}\rfloor\) 求和。

int f(int n) {
    int ans = 0;
    for(int i=1,j; i<=n; i=j+1)
        j = n / (n/i), ans += (n/i) * (j-i+1);
    return ans;
}

P2424 约数和:即 \(\sum_{i=1}^{n}{i\times\lfloor\dfrac{n}{i}\rfloor}\),对于多出来的 \(\times i\) 计算每一项时做等差数列求和即可。

P2261 [CQOI2007]余数求和

\[\begin{aligned} \sum_{i=1}^{n}{k\bmod i} &= \sum_{i=1}^{n}{k-i\times\lfloor\dfrac{k}{i}\rfloor}\\ &= n\times k - \sum_{i=1}^{n}{i\times\lfloor\dfrac{k}{i}\rfloor} \end{aligned} \]

操作分块

类似于回滚莫队 (我不会

P6578 [Ynoi2019] 魔法少女网站
考虑不带修:对于每次询问,把小于等于 \(x\) 的数字变成1,其他的变成0,后用数据结构维护。由于每次x不一样,对x从小到大排序,这样只需要在数据结构上进行“添加一”操作。用分块处理。添加 \(O(1)\) 查询 \(O(\sqrt{n})\)。
考虑带修:把修改按照时间分块,假设块长 \(\sqrt{n}\),对于块内查询,只需要把最多 \(\sqrt{n}\) 个修改应用到数据结构上,然后再撤销即可。块内查询后,把整个块的所有操作永久应用到数据结构上,将数据结构重构。
还是不会

CF710F String Set Queries
前置:AC 自动机 \(O(t)\) 时间内查询字符串 \(s\) 在 \(t\) 上出现的次数。
将添加和删除操作分离,两个不同 AC 自动机“AC+”和“AC-”。二进制分组,对于 \(2^n\) 分成不同组在添加和删除的时候在不同分组中进行,复杂度 \(O(n\log n)\)。

根号分治

每次询问给出 \(k\) 个数,求这 \(k\) 个数的一些信息。对于大于 \(\sqrt{n}\) 和小于 \(\sqrt{n}\) 的情况分开处理。

P3396 哈希冲突:对 \(p\) 进行分块,当 \(p\) 小于 \(\sqrt{n}\) 的时候预处理,大于 \(\sqrt{n}\) 的时候暴力。

P1989 无向图三元环计数:枚举每条边,看度数小的点,暴力 for 度数小的那一边。
如果一个点度数大于 \(\sqrt{m}\),则次数不超过 \(\sqrt{m}\) 次。
如果一个点度数小于 \(\sqrt{m}\),则次数最多做 \(m\) 次。
总复杂度 \(O(m\sqrt{m})\)。

CF444D DZY Loves Strings:一共只有 \(4n\) 个子串。把串分类成出现次数大于 \(\sqrt{(4n)}\)、小于 \(\sqrt{(4n)}\) 两类。
对于前面一类,数量很少,预处理即可。
对于后面一类,每次询问暴力 for。

其他小清新思维题

[AGC024B] Backfront
考虑只允许放在前面怎么做。剩下的不会了

[AGC018B] Sports Festival:看起来像二分,却不是。考虑增量构造。假如一开始我们每个项目都开展的话,肯定有一个项目报名人数最多,假设这个项目是 \(x\),有 \(k\) 个人报名显然我们的最优解至多是 \(k\) 了
考虑任意一种包含项目 \(x\) 的方案,得到的答案肯定不会比 \(k\) 更优也就是说,如果我们想得到一个优于 \(k\) 的答案,一定不能包含 \(x\) 这个项目于是我们删掉这个项目,把她当作没有,就变成了一个规模更小的子问题子问题的解法和原问题一样,所以重复这个过程就好了。

[AGC025D] Choosing Points:二分图

[AGC017B] Moderate Differences:???????????

标签:lfloor,12,rfloor,分块,31,sqrt,times,笔记
From: https://www.cnblogs.com/agrumestly/p/17398353.html

相关文章

  • C基础笔记(for循环语句)
    循环之for语句从目一开始,连续不断做一件事,叫循环语法:for(表达式1(赋值语句初值);表达式2(条件);表达式3(增值的赋值语句)){ 循环要做的事(一次或多次)} #include<stdio.h>intmain(){ for(inti=1;i<=100;i++) { printf("%d\n",i); } retur......
  • 华硕 PRIME H610M-A D4 i5-12490F 1060电脑 Hackintosh 黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板华硕PRIMEH610M-AD4(LPCController/eSPIControllerH610芯片组)处理器12thGenIntelCorei5-12490F六核已驱动内存 16GB(酷兽DDR43200MHz8GBx2)已驱动硬盘三星SSD860EVO250G......
  • es笔记一之es安装与介绍
    本文首发于公众号:Hunter后端原文链接:es笔记一之es安装与介绍首先介绍一下es,全名为Elasticsearch,它定义上不是一种数据库,是一种搜索引擎。我们可以把海量数据都放到es里然后提供搜索操作,但是MySQL也同样可以提供搜索,为什么要用es呢?一个是因为它搜索快,使用倒排索引的方......
  • 数学笔记
    分数乘法  分数乘整数,用分子乘整数  的积作分子,分母不变。   分数除法倒数 分数  真分数  分子比分母小,真分数小于1  假分数  分子大于或等于分母,假分数大于或等于1    假分数能化整数先化整数,避免直接化简出问题        ......
  • C基础笔记(分支结构if-else)
    条件判断之ifelse语句//1.从上往下顺序执行//2.C语言程序将结构分为:顺序和分支//3.if(条件)//常量变量运算式比较式//{  条件成立时要做的事(一行或多行代码)//}正反两种情况#include<stdio.h>intmain(){inta;scanf_s("%d",&a);if(a%2==0){ printf("%d是偶数\n......
  • C基础笔记(运算符2)
    运算符(2)  //1.特殊运算符:() .  ->  []//2.算术运算符:+ - * % / ++ --//3.关系运算符:>  >= < <== == !=//4.位操作运算符:& ^ |  << >>//5.逻辑运算符:&&  || !//6.条件运算符:?://7.赋值运算符:= += -=  %= /=......
  • C基础笔记(运算符1)
    运算符(1)1.特殊运算符:()  .  ->  []2.算术运算符:+  -  *  %  /  ++  --3.关系运算符:>  >= <  <=  =  ==  !=4.位操作运算符:&  ^  |   <<  >>5.逻辑运算符:&&  ||  !6.条件运算符:  ?:7.赋......
  • C基础笔记(常量与变量2)
    常量与变量(2)//要想使用变量必须先定义它//变量通过赋值保存东西//变量应该赋相同类型的值,如果赋值类型不一致,参考左端//变量赋值不要超过它能保存的值#include<stdio.h>  intmain()   {inti;//定义一个整型变量ii=12;//将变量赋值为12 pri......
  • C基础笔记(Hello world)
    第一个程序Helloworld#include<stdio.h>  //包含语句//intmain()   //主函数//{ //printf(“Helloworld!”); //输出函数//getchar();//等待一个字符 //return0;......
  • C基础笔记(输出函数)
    printf输出函数//printf的语法,输出语句//1.printf(“你想输出的内容”);//2.printf(“格式字符串”,……);//3.占位符  %d整形数%f小数%s字符串%c单个字符//  \n换行 #include<stdio.h>  // intmain()   {printf(“num=%d”,1);printf(“num=%f”......