Noip前的大抱佛脚----一些思路

一些有启发性的思路

序列

  • 线段树(当然还要有主席树啊!)
  • 差分和前缀和啊
  • 分块
  • 莫队
  • 看到等差数列先推一波式子啊(天天爱跑步)
  • 有序序列的动态插入删除

    有的时候需要算贡献,当你发现序列(离散化后)值域一定时,便可以尝试使用树状数组

  • 维护\(mex\)

    可以尝试使用值域分块,当这个块内全部有值了就打个\(tag\)

  • 等和序列

    大概就是说可以多项式乘起来那种吧,可以发现差分之后是回文串!

  • 序列差分

    异或序列可以差分!!(具体差分方法:遇到一个1,给当前位置和下一个位置异或上一个1,这样统计前缀和后就是原序列了)

函数问题

  • 打表观察进制规律(如\(Kathy\)的函数)

网格图

封闭图形问题

  • 横向维护网格前缀和,把网格交点看作点,每条边作为边,对于水平方向的边边权为0,对于水平方向的可以连两条边,一个表示这行要开始了,减去前缀和,一个表示这行结束了,加上前缀和。这样跑出的一个环正好代价为圈住的网格权值和

如圈地游戏的判正环的做法

黑白染色

如果黑白格互不影响或者有一些奇妙的性质,那么可以往这方面考虑

删除和询问

如果可以离线,可以尝试正序删转倒序加,有时问题就变得可做

乘法问题

如果加法更可做,考虑

  • 取log
  • 求原根

顺序问题

顺序对答案有影响,求答案的最值

通常这个只需要对两个元素考虑顺序,因为相邻两个有大小关系符合冒泡排序的要求,从而可以对整个序列排序

例题如:10.12天山折梅手、Noip国王游戏

最值问题

可以考虑从大往小做或者从小往大做,例如从小往大加边就是Kruscal重构树的过程

研究成果

名字取得太高大上了嗯只是平时的一些小想法

数论分块套数论分块的复杂度

数论分块得到\(\frac{n}{i}\)后再对其数论分块

\(Ans<n\sum_{i=1}^{\sqrt n}\sqrt\frac{1}{i}\)

又有公式\(\sum_{i=1}^{n}\frac{1}{\sqrt i}<2\sqrt n\)(先假设,然后用数学归纳法证明)

所以\(Ans<n^{\frac{3}{4}}\)即为其估计复杂度,实际上要小得多

原文地址:https://www.cnblogs.com/xzyxzy/p/9903905.html

时间: 2024-11-05 20:39:02

Noip前的大抱佛脚----一些思路的相关文章

Noip前的大抱佛脚----文章索引

Noip前的大抱佛脚----赛前任务 Noip前的大抱佛脚----考场配置 Noip前的大抱佛脚----数论 Noip前的大抱佛脚----图论 Noip前的大抱佛脚----动态规划 Noip前的大抱佛脚----数据结构 Noip前的大抱佛脚----根号对数算法 Noip前的大抱佛脚----字符串 Noip前的大抱佛脚----一些思路 Noip前的大抱佛脚----奇技淫巧 原文地址:https://www.cnblogs.com/xzyxzy/p/9903933.html

Noip前的大抱佛脚----数论

数论 知识点 Exgcd \(O(logn)\)求解\(Ax+By=C\)的问题 1.若\(C\%gcd(A,B)!=0\)则无解 2.\(Gcd=gcd(A,B);A/=Gcd,B/=Gcd,C/=Gcd\) 3.代入下面代码求\(Ax+By=1\) 4.\(x*C\),得到一组特解 5.通解为\(\begin{cases}x=x_0+k*B \\y=y_0+k*A\end{cases}\) void Exgcd(ll a,ll b,ll &x,ll &y) { if(!b){x=1;y

Noip前的大抱佛脚----根号对数算法

根号算法 分块 数列分块入门九题(hzwer) 入门题1,2,3,4,5,7 问题:给一段区间打上标记后单点查询 解法:主要是每块维护一些标记,计算答案等,此类分块较为简单 注意:块大小一般为\(\sqrt n\) 复杂度:\(O(n\sqrt n)\) 入门题6 问题:每次朝数列中间插入一个元素,查询第k个元素是什么 解法:块大小超过一定值后暴力重构!采用链表实现 复杂度:\(O(n\sqrt n)\) 入门题8 问题:每次询问一个区间内为\(c?\)的元素个数,并把整个区间改为\(c?\)

Noip前的大抱佛脚----数据结构

数据结构 线段树 注意:空间开4倍 神奇标记 From8.26 Test_zsy(CPU监控) 如果一个点权为\(val\)的点被打上了\((a,b)\)标记,那么他的实际点权为\(max(a+val,b)\) 干啥滴? 标记不下放 区间加标记不下放,维护区间max或者最大值 方法是当前\(tag\)维护当前区域标记,\(t\)维护左右儿子的\(max+tag[now]\),并没有快多少,如果仍然忘记见提交记录 并查集 维护二分图 并查集每个点维护是否要改颜色,然后按秩合并/按大小合并即可 实际

找出数组前N大的数

这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二:用最大堆的思想. 我暂时只实现了思路一,思路二我之后实现了会补上. 思路一比较简单了.我们先用快排的思想找出第n大的数,然后带上后面n-1个就完事了.因为后面的都比支点数大. 怎么找第n大的数?我在之前的博客写过,请移步到  找第n大的数 代码: #include<stdio.h> #inclu

6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场

题意: 给出一个仙人掌图,然后求他的前K小生成树. 思路: 先给出官方题解 由于图是一个仙人掌,所以显然对于图上的每一个环都需要从环上取出一条边删掉.所以问题就变为有 M 个集合,每个集合里面都有一堆数字,要从每个集合中选择一个恰好一个数加起来.求所有的这样的和中,前 K 大的是哪些.这就是一个经典问题了. 点双联通就不说了 都一眼能看出来做法就是缩点之后每个环每次取一个,然后找最大的k个所以这道题的难点就在这里,做法当然是不知道啦,看了题解和博客才懂的.以前做过两个集合合并的,这个是k个合并,

算法导论学习之线性时间求第k小元素+堆思想求前k大元素

对于曾经,假设要我求第k小元素.或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路. 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法. 其详细的分治思路例如以下: 1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分.使得A[p,q-1]都小于A[q],A[q+1,r]都不小于A[q]; 2.求解:假设A[q]恰好是第k小元素直接返回,假设第k小元素落在前半区间就到A[p,q-1]递归查找.否则到A[q+1,r]中递归查找. 3

NOIP前必须记住的30句话

NOIP前必须记住的30句话 1.比赛前一天晚上请准备好你的各种证件,事先查好去往考场的路线2.比赛之前请先调整你的屏幕分辨率到你喜欢的大小3.比赛之前请把编译器的字体调为你平时惯用的字体,尤其是注意这种字体中的逗号,点,1,l这种易混淆的字是不是区分明显4.在不影响视野的情况下,请将字号尽可能调大,方便查错5.请将题目通读完以后,再开始深入思考你认为最容易的一道题6.即使这道题再容易,也不要着急写代码,请先明确自己每一步要干什么后,再开始写,轻敌会是你最大的错误7.即使这道题看起来再没法做,也

OpenJ_Bailian 7617 输出前k大的数

题目传送门 OpenJ_Bailian 7617 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000.第二行包含n个整数,表示数组的元素,整数之间以一个空格分开.每个整数的绝对值不超过100000000.第三行包含一个整数k.k < n. 输出 从大到小输出前k大的数,每个数一行. 样例输入 10 4 5 6 9 8 7 1 2 3 0 5 样例输出 9 8 7 6 5 解题思路: emmmmm直接sort排序然后输