随笔分类 - 数据结构们
摘要:链接:Miku 本题的关键就在于隐藏的单调性 开三个队列,分别放没切的,切出来的大的,切出来的小的。 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> const int m
阅读全文
摘要:链接:Miku、多组数据(蓝题和紫题的区别就是多组数据) 非常显然的贪心思路就是能放就放,放满了然后把下一次使用间隔最久的拿走、 但是这样会有一个问题,如果它已经进去了怎么办, 直接continue会wa掉,因为即使已经有了,我们还是应该更新一下下一个的值(易证) 那么该怎么办呢 if(pl[p[i
阅读全文
摘要:链接:Miku 链表存图,但是要注意创造出来个0和n+1号坑,这会方便我们后续处理的 贪心的部分就是选择最高的,然后把两边的去掉 等等,我反悔了咋办,我觉得选两边的更好!(这里有一个问题,要不都选,要不都不选,这是可以证明的) 那么我们就把两边和中间拼成一颗巨树,他的价值是两边之和-中间的(这样再选
阅读全文
摘要:链接:Miku 在做这个题之前我做了1168,所以该出来了个这 #include<iostream> #include<cstdio> #include<algorithm> #include<queue> using namespace std; priority_queue <int,vecto
阅读全文
摘要:链接:Miku 对顶堆做法 #include<iostream> #include<cstdio> #include<algorithm> #include<queue> using namespace std; priority_queue <int,vector<int>,greater<int
阅读全文
摘要:链接:Miku 一道巨大的模拟,因为每次都是从第一个开始干并且有顺序,那么就该用优先队列了 顺序问题只要重载一下运算符即可 CPU的任务如果干了一部分后被踢出去了,又轮到它的时候它会接着干而不是从头开始 #include<iostream> #include<cstdio> #include<alg
阅读全文
摘要:链接:Miku 和HDu的那道还是蛮相似的,但是数据更强 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int xx,yy,xxx,yyy; long long
阅读全文
摘要:链接:Miku 不显然的矩阵乘法 #include<iostream> #include<cstdio> #include<cstring> using namespace std; long long n; long long m=1000000007; long long c[5][5],a[5
阅读全文
摘要:扫描线求周长 链接(HDU):Miku 链接(Vjudge):Miku HDU是多组数据!!!而且不写明白了!!! 我本以为既然多组数据,何不写上一共几组,既然不写,那必然是不存在了 但是它就是多组数据 这道题显然的做法是扫描两次,横着一次竖着一次,不过会很繁琐 事实上,一次就够了 完全可以从上向下
阅读全文
摘要:链接:Miku 我记得扫描线有一道更水的例题来 扫描线,顾名思义,我们做这道题的时候,就要是用一道线来扫描一样 这里有一堆矩阵,把每一个区间拆成上下两个线段,然后按照某一个端点排序,这道线就开始从头扫描 到了一个矩阵开始的线,我们就更新扫描线的长度,反之减少即可 两个线段之间的长度很明显就是区间距离
阅读全文
摘要:链接:Miku 一道二分+线段树 显然暴力模拟会T飞,可以用二分解决 二分啥呢?二分mid与最后在q的位置的数的大小 但是怎么知道大还是小呢,既然我们只想要知道大还是小,那么那个点原来是 多大/多小是没有意义的,只有和mid的相对大小,那么我们就把比mid大的改成1,小于等于的改为0 然后进行排序
阅读全文
摘要:链接:Miku 没有UVa账号唉 卡了蒟蒻一天,因为漏掉了懒标记的下放。 线段树的巨大码量,为bug提供了绝佳的掩护 写完后,我哭了 人间的喜悦就这么简单吧 对于一个矩阵,有两个操作,子矩阵加v或者子矩阵变为v 询问子矩阵最大值,最小值和和 最简单的想法是线段树,不过太难实现了(对于本蒟蒻),所以说
阅读全文
摘要:链接:Miku 这道题比想象的要水,虽然说标签有个离散化,但是事实上根本不用 但是这道题的空间范围很苛刻,倘若写记录每个点的左右子节点的线段树写法的话,可能会MLE 所以我写了不记录的写法,这样虽然会牺牲时间,但是节省了空间 而且这道题的空间,竟然开n*3就可以了 思路:海报之间是没有区别的,暴力的
阅读全文
摘要:链接:Miku 凡天下之事,但知其一不知其二者多矣,可据理臆断欤? 我就是但知其一呜呜呜 %%%并感谢yyq大佬 很显然可以用线段树操作 这次的lazy指的是这个区间需不需要被反转,然后显然,一个区间反转后亮的灯泡的值就是区间灯泡总量-原来亮的值 所以写出来了个这个 #include<iostrea
阅读全文
摘要:链接:Miku 再见了,我的公主! 去除题面,这就是一道线段树板子题,暴力枚举每一个区间然后去最大值就可以了 有星星重叠?本来就是在那个点加上去,继续加就可以了 这就是道裸的区间和+单点修改 以及,为了省事,我的线段树直接把右端点搞成了100000,毕竟一堆零没有任何影响 #include<iost
阅读全文
摘要:链接:Miku 线段树水题 单点修改+区间最大值查询 这道题比板子很简单,因为懒标记不用写 为什么呢,懒标记什么时候用?我们要修改的区间完全覆盖了某个区间的时候 全是单点修改还能覆盖谁?只有他自己啊。 那还懒什么,懒不了 因为在洛谷上的要求是大于原来的成绩再修改,所以我们修改的时候还要加个判断 至于
阅读全文
摘要:链接:Miku 这道题可以帮你深入了解懒标记的意义 蒟蒻本来想通过蒟蒻做法做的,就是种树就在位置+1,砍了-1,然而发现这样做会砍掉不存在的树 然而懒标记这个东西,为什么一定要是加或减呢?标记成这个区间需要修改成什么也可以呀 一开始的种树,就相当于把整个区间赋值为1,而砍树,就相当于把这个区间赋值为
阅读全文
摘要:线段是是一个很好用的数据结构,特别是在于长长的板子 链接:Miku 先来一份线段树1的代码 #include<iostream> #include<cstdio> #include<algorithm> int n,m; long long sum[400005], lazy[400005]; in
阅读全文
摘要:链接:Miku 一道非常水的静态区间查询的问题。 为什么说他水呢,在洛谷上的数据实在太弱,直接n^2暴力预处理都行 然而我是不会那么干的,我选择了st表 在这道题中,只要加上一个gcd函数,然后把转移的和询问的方式改成两个区间gcd的方式就可以了 #include<iostream> #includ
阅读全文
摘要:链接:Miku 对于这个题,我们对于每一个数i,分别求出所有比它小的,在它前面的和 比它大的,在它后面的,然后把这两个乘起来,然后再把这些积加起来就可以了 然而这样直接做复杂度太高了,我们要优化,仿照树状数组求逆序对的方法,我们就可以在可以接受的时间内求出并且解决问题了 #include<iostr
阅读全文

浙公网安备 33010602011771号