自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 POJ - 3347 Kadj Squares | 计算几何思维题

sada

2020-11-09 22:28:40 110

原创 2020牛客多校 2-G Greater and Greater

描述Greater and Greater给出a、b两个串,长分别为n<=1.5e5,m<=4e4,求a中有多少长为m的连续子串t,使得ti>=bi题解官方题解:S的情况最多有m个,将b串和下标一起排序,根据下标,就能确定m种S,之后二分确定ai对应的是哪一个S代码#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<

2020-07-15 17:29:30 330

原创 CF - 484 | 主席树&区间最大连续和

描述给定n个数据,m个询问,每次询问给出l,r,w,问在区间l到r之间,寻找w个连续数据的,使得它们的最小值最大。分析若仅仅一次询问,很明显可以用单调队列来完成,但在这里是多次询问。首先,找最大值,可以用二分方法,转化为判定[l,r]区间内是否有w个连续数据,最小值为mid;考虑一颗维护区间最大连续和的树,每个位置,若代表的数据大于mid,该位置为1,否则为0,则求该树在[l,r]区间内最大连续字段和即可。因为结果一定是a[i](1<=i<=n),所以二分查找下标,同时只需要建立n颗树

2020-06-30 13:49:25 191

原创 牛客 - 骚区间 | set妙用&树状数组

描述给定数组a,长度为1e6,保证a是个排列。给出“骚区间”的定义区间的左端为该区间的次小值,右端为该区间的次大值。求给定数组内有多少个“骚区间”。思路对每个元素判定其作为左、右端点时,另一端点所允许的区间,例如[2,4,1,5,3,6],元素4作为做为左端点时,右端点区间可以是从1或5;3作为右端点时,左端点区间可以时1或5。升序遍历下标,若当前下标是一个右端点对应的左端点可行区间的左端,则把树状数组上该右端点位置+1;若当前下标是一个右端点对应的左端点可行区间的右端+1位置,则把树状数组上该右端

2020-06-27 23:16:18 251

原创 HDU - 3642 | 扫描线&重复3次以上矩形面积

描述给定n个立方体,求重复3次以上的总体积。分析题目中z轴数据|z|<=500,所以可以逐层判读,每层就是计算重复覆盖3次以上矩形面积此题要注意的地方:所给坐标为点,离散化后,则线段树上,x点维护的是坐标ls[x]到ls[x+1]间长度。线段树维护的是当前区间覆盖次数,更新方式详间代码update。求面积时不要用line[i].x-line[i-1].x作为当前有效宽。代码#include<cmath>#include<cstdio>#include&

2020-06-20 22:35:58 162

原创 HDU - 4553 | 区间合并&最大连续字段和

描述1~n区间初始全部为1,每次申请一段长为x的连续区间,返回最靠左的起点位置。此题要求维护两个树的最大连续字段和。分析记录此题主要还是因为这个区间合并于自己之前写的方式不太一样,查询时先看左子树内是否存在,这样的区间,再去看中间,中间满足就直接返回,最后看右子树。递归结束条件就是当前节点的左端最长大于等于请求的长度。代码#include<cmath>#include<cstdio>#include<cstring>#include<iostream

2020-06-20 16:38:34 172

原创 HDU - 4614 | 更新区间为l~n

描述n个位置,初始为0,m个操作操作,两种,一:给定x,y,从x位置开始向右选则y个空位置,这些位置置1,空位置不足则最多到n位置结束即可,输出放置的最左端和最右段,一个也不能放就输出“Can not put any one.”;二:清空x~y区间,输出区间内非空位置个数。分析每次操作的区间是x~n,update(int k,int l)。当前区间在范围内、且全空、且长度小于等于y,则当前区间更新为全1,y -= 长度。代码//题目要求编号为0~n-1#include<cmath>

2020-06-19 22:40:07 136

原创 HDU - 4578 | 线段树多种Lz标记 or 相等标记妙用

描述n个数,初始全为0;m次操作,4种,包括:区间加x,区间全部改变为x,区间全乘以x,询问区间内各元素的p次方的总和(1<=p<=3)。分析因为p很小,所以维护区间的1次方和s1、2次方和s2、3次方和s3;设定三个lz标记lza、lzm、lzc,表示加、乘、改操作。分析区间更新操作(区间加要注意更新顺序,len为区间长度)区间加:s3=s3+len∗x3+3∗x∗(s2+x∗s1)s3=s3+len*x^3+3*x*(s2+x*s1)s3=s3+len∗x3+3∗x∗(s2+x∗

2020-06-18 18:32:46 282

原创 牛客 - Walk | 求组合数

描述求矩阵中从(1,1)到(n,m)有多少个最短路径。n,m<=1e6n,m<=1e6n,m<=1e6路径过程中有n-1次向下,m-1次向右,答案就是C(n+m−2,n−1)C(n+m-2,n-1)C(n+m−2,n−1)求组合数,可以根据C(n,m)=C(n−1,m−1)+C(n−1,m)C(n,m)=C(n-1,m-1)+C(n-1, m)C(n,m)=C(n−1,m−1)+C(n−1,m)打表,O(n2)O(n^2)O(n2);可以用定义C(n,m)=n!(n−m)!∗m!C

2020-06-15 18:24:49 141

原创 CF - 1354D | 二分 & 区间第K小 & 思维

描述n个数,q个询问,每次询问输入一个数b (|b|<=n),b>0,将该数加入到一开始的数集合中(多重集),b<0,删除集合中第|b|小的数。q此询问后,若最后集合为空,输出0,否则任意输出一个剩余的元素。1<=n,q<=1e6,且空间限制不允许使用线段树。题目只要求输出q次询问后任意一个剩余元素,考虑输出剩余元素的最大值,二分枚举该最大值,检测枚举值是否合法。设检查的值为x,最终小于x的数有p个,若p<siz,则x可以继续缩小。代码#include&l

2020-05-18 14:20:42 155

原创 CF - 1350C | 数论

题目求gcd(lcm(ai,aj)∣i<j)gcd(lcm({a_i,a_j}) | i<j)gcd(lcm(ai​,aj​)∣i<j),其中2≤n≤100000,ai≤2e62≤n≤100000,a_i≤2e62≤n≤100000,ai​≤2e6。gcd(lcm(a,b),lcm(a,c),lcm(a,d))=lcm(a,gcd(b,c,d))gcd(lcm(a,b), lcm(a,c), lcm(a,d)) = lcm(a, gcd(b,c,d))gcd(lcm(a,b),lcm

2020-05-17 11:11:24 215

原创 P4198 楼房重建 | 动态最长上升序列 线段树 区间合并

描述n个点,初始为0,m次操作,每次修改第XiX_iXi​个数的权值为Xi/YiX_i/Y_iXi​/Yi​,并要求输出此时最长上升序列长度。输入1≤XiX_iXi​≤n,1≤YiY_iYi​≤1e9,1≤n,m≤1e5。最后结果是整个区间内最长的上升序列长度,维护区间的最大值以及最长上升序列的长度,合并时,左区间的序列长度时一定要统计的,然后用左区间的最大值,在右区间中递归寻找,大于左区间最大值的最长上升序列。代码#include<cmath>#include<cstd

2020-05-14 22:14:27 169

原创 HDU - 5091 | 线段树扫描线(附模板)

题意给定N个点的x、y坐标,一个可平移的W*H的矩阵,问最多能用这个矩阵框住多少个点。 (1<=N<=10000, 1<=W,H<=40000, -20000<=x,y<=20000, )每个点扩展一个W*H的矩阵,点处在左下角,用线段树扫描线来做。每个矩阵左边为进边,权值为1,右边为负边,权值为-1;线段树维护进、出边的两端点的区间最大值,表示更新此边后最多重叠矩形个数。代码#include<cmath>#include<cstdio

2020-05-11 22:39:55 229

原创 CF - 1348D | 思维

题目大意:初始时有一个细胞有一个单位的重量,每个细胞每天增长1个单位的重量,每天你可以选择任意数目的细胞让他们分裂,即一个变成两个,对总重量无影响,但之后分裂的细胞也会每天增长(先分裂,再增长)。问最少增长几次,可以使总重量恰好为n(n<=1e9)。输入:多组测试,t次,每次输入一整数n。输出:输出最少增长次数d,接下来d个整数,表示每次增长的个数。设第i天个数为ai,则相当于...

2020-05-04 18:25:42 181

原创 ZOJ - 2974 | 矩阵快速幂模板

题目描述:n个杯子,每个杯子(i)每轮将自己的水平分给第i1,i2…个杯子,问m轮后各个杯子内水的多少。 n<=20, m<=1e9。设一开始各个杯子内容量为x[1][n]数组,分配情况为y[n][n](y[i][j],表示i分配给j自己容量的占比)。则x *(y^m)后,一维数组x内就是各个容器内含量。代码,附模板:#include<cmath>#incl...

2020-04-30 18:08:24 129

原创 计蒜客 数列求和

计蒜客—数列求和题目:Input:2-756.89 52.52172.22 67.17Output:-761.49题解:A(i+1) = Ai*2 - A(i-1) + Ci*2那么:A2 = 2*A1 - A0 + 2*C1A3 = 2*A2 - A1 + 2*C2A4 = 2*A3 - A2 + 2*C3不考虑Ci,A2 = 2*A1 - A0。A3 = 2*A...

2020-04-22 18:05:44 336

原创 CF - 1330D

给定一个数d,求有多少数列,满足:1<=a1<a2…an<=n,且a1⊕a2>a2, a1⊕a2⊕a3>a3…首先,设a1的二进制最高位为第i位,那么a2最高位>i。像是分组背包的思想,最高位为i的元素为一组,因为最高位为i,那么该组只能选最多一个。dp[i]为以最高位元素为i结尾的数量,那么dp[i] = (1 + dp[ 0 ~ i-1])*(2^...

2020-04-10 18:07:54 119

原创 CF - 1333C

CF - 1333C题目定义good数列:不含有和为0子串的的数列。给定一个数组,问其中多少子串是good数列。运用dp的思想,设dp[i]是前i个数的good子串数量,已知dp[i-1]求dp[i]时,就要找到从1到i,起点pos最靠右的子串,该子串和为0,那么新增的good子串数就是i-pos。为了维护pos,前缀和sum[i]已知,只要找到sum[k],sum[k]==sum[i...

2020-04-09 17:28:45 272

原创 Crazy Calendar LightOJ - 1393

题意:R*C方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>typedef long long LL;using namespace std;const ...

2019-10-20 16:48:25 124

原创 hdu-4348 To the moon 可持久化线段树 | 区间更新

大意:给定一些数据,操作为:1.从 i 到 j 数据加 d ,时间戳加1。2.当前时间戳,从 i 到 j 的数据和。3.t 时间戳对应的操作完成时,i 到 j 的数据和。4.​时间戳恢复到 t 。标准在线主席树,不过维护的不是权值线段树,而是正常区间和的线段树。按照一般主席树的写法,我们复用之前的结点建树即可,不过这里是区间更新,有时会新建两条新链。一般,我们维护lz标记时,pu...

2019-10-13 22:27:01 256

原创 Count on a tree SPOJ - COT | 主席树 & lca

大意:给出n个点,这n个点上各有一个代表该点权值的数,这n个点之间相互连接构成无向树,问在u到v结点的路径上,第k大的权值是多少?考虑树上求两点之间求权值和的题目,我们用dis[x]表示x点到根结点的权值和,那么x与y之间权值和就是dis[x]+dis[y]-dis[lca]-dis[lca的父亲]。同理,我们可以以每个结点为根结点建立保存此点到根节点路径上所有点的权值线段树。代码如下,...

2019-10-13 21:50:37 113

原创 动态主席树(主席树套树状数组)zoj 2112 Dynamic Rankings 详解

既然看到这个题了,相信静态主席树求区间第k大应该不成问题了, 此题在原有基础上,不过添加了单点修改的要求。那么来说一下大体思路:首先,用题目给的n个原始数据像之前一样建立主席树。对于修改,我们不是要真的去修改我们已经建立好的主席树,而是用另一个数组来维护修改所造成的变化,例如:要求 i 位置到 j 位置的第k大,之前的策略是找到第 i-1 和 第 j 棵树,两个权值线段树根据左右子节点的权值下...

2019-10-10 20:04:57 197

原创 [AHOI2009]中国象棋

题目描述这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。你也来和小可可一起锻炼一下思维吧!输入格式一行包含两个整数N,M,之间由一个空格隔开。输出格式总共的方案数,...

2019-10-08 18:41:49 150

原创 HDU 5492 Find a path 2015合肥

N* M(1<=N,M<=30)的矩阵,矩阵的每一格有一个非负权值(<=30),从(1,1)出发,每次只能向右或向下移动,到达(n,m)时,经过的格子的权值形成一序列,求此序列方差最小值*(n-m+1)。图片有点大这样,我们要求的就是平方和,与和的平方,利用dp来编写。dp[i][j][k]表示在i,j这个点,元素的和为k时,元素的平方和的最小值。dp[i][j][k] ...

2019-09-10 21:16:46 118

原创 Buses and People + CodeForces - 160E

Buses and People 三维处理题目大意:有n辆公交车,每辆公交车有s(起始点),f(终点),t(发车时间) ,有m个人,每个人有l(起点),r(终点),t(出现时间)对于一个人,当t(人)<=t(车), s<=l,r <=f 时就能上这辆车,问能上的发车时间最早的是那一辆类似三维偏序问题,有三个维度需要我们解决。首先,车和人都有l,r,t,三个属性,先按照l排...

2019-09-04 19:59:23 276

原创 Codeforces 1051D Bicolorings (对内存空间上了一课)

Codeforces 1051D Bicolorings题目不是很难,有多种方法可解,但当时真正难到我的是我不知道怎么存储这个图。1≤n,m≤5x104, n x m≤4x105 的数据量让我不知道怎么开数组,直接二维数组内存会超,然后我又想用string,也非常麻烦。之后在cy大佬的指示下,在main中直接开边长数组,4x105的数量级不会炸栈。此外,防止出现更大的数量级,可以用mal...

2019-08-01 21:18:22 210 1

原创 Letters Shop (Codeforces)

Letters Shop今天下午被卡出翔,事后得cy大佬指点,才明白如何解题。在此写个题解。题目大意为给定一个主字符串,然后输入若干字符串,这些字符串中的字符都是可以从主字符中拿到,问若只能从主字符串中从左到右一个个取字符,最少要取多少个能构成。若直接一个个比较跑,没有悬念的T了,所以我们要预处理一下。字符串中所有元素都是小写字母,可以记录下主字符串中字符x第i次出现的位置。读入要...

2019-08-01 20:28:25 184

原创 POJ 1094 Sorting It All Out 拓扑排序

POJ 1094 Sorting It All Out大意:给定A<B B<C形式关系若干,问能否构成严格的从小到大的排序有许多坑点,首先,输出有三种形式:在第x组序列给出时可以构成严格的排序abcd…在第x组序列给出时出现矛盾不能确定排序的序列前两者的优先级高于第三者我们每输入一组关系,都进行一次拓扑排序,判断关系是能严格排序,出现矛盾,还是不确定,一旦这组关系是严...

2019-07-29 21:32:40 109

原创 Wormholes(虫洞) 判断负环 + 队列优化Bellman邻接表实现

Wormholes 图中有无负环的判断John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1…N标号)块地,并有W个虫洞(有向边)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到...

2019-07-29 20:55:08 253 1

原创 POJ 1062 昂贵的聘礼

vj链接:https://cn.vjudge.net/problem/OpenJ_Bailian-1062题目可以转换为最短路线的问题,首先,关于每个物品的原价,可以假设有一个源点(设下标为0),即物品到这个源点的距离。1可以用2加x元换,那么可以用一条1到2的距离为x的路线表示,这样,问题就转换成了求1到0的最短距离。(这样设计路线可能怪怪的,可以把方向反过来)还有一个需要解决的问题,就是...

2019-07-03 11:26:25 89

原创 STL常用模板

笔记一下,日后相忘#include <algorithm>sort(a,a+n);stable_sort(a,a+n); //稳定排序reverse(a,a+n);//反转//数组有序 unnique(a,a+n);//去重 返回尾部指针,注意长度会变化len = unnique(a,a+n) - a;//数组有序 log(n)lower_bound(a,a+n...

2019-06-01 19:33:57 521

原创 01背包初探

关于01背包自己看了看01背包的一些东西,感觉递推式对新手还是很不友好的,还有初始化的一些问题,老是迷迷糊糊小小的总结一下吧#include<bits/stdc++.h>using namespace std;int dp[10000][10000], w[10000], v[10000];int main(){ int n,m;//最大承重n,m个物品 ...

2019-05-02 17:32:09 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除