- 博客(27)
- 收藏
- 关注
原创 最近公共祖先LCA(模板)
最近公共祖先LCA(模板)效率比较树链求LCAconst int N=5e5+5;const int M=1e6+5;struct LS{ int cnt=0; struct cpp { int to,cost,next; }edge[N*2]; int head[ N ]; void inta(){ cnt=0; memset( head,-1,sizeof(head) ); } void
2021-10-30 21:32:55
146
原创 Deltix Round, Summer 2021 (open for everyone, rated, Div. 1 + Div. 2)
A : A Variety of Operations解题思路 :~略AC代码 :#include<iostream>#include<queue>#include<string>#include<string.h>#include<algorithm>#include<cstdio>#include<map>#include<set>#include<stack>#inc
2021-08-30 12:39:32
331
原创 Mayor‘s posters(线段树+离散化) [kuangbin带你飞]刷题记录
Mayor’s posters题意:给出一面墙,给出n张海报贴在墙上,每张海报都覆盖一个范围,问最后可以看到多少张海报思路:既然这是线段树专题 , 那么我们就要线段树做吧 (其实还可以用优先队列 ), 首先L与R<=1e7 , n<=1e5,要建树,我们肯定得离散化才行 , 然后这颗树虽然不满足区间可加性但是这题,也没有区间查询只有单点查询,那就没事. 只用线段树维护区间的海报编号就行了代码:#include<iostream>#include<queue&g
2021-08-26 00:20:25
112
原创 并查集模板
并查集无权并查集(路径压缩)并查集(非rank优化)//注意我写的第一位不能有0哦,因为我的强迫症让我不想初始化int fa[10005];inline int find(int u){ if ( 0==fa[u]) return fa[u]=u; int x=u,t; while(x!=fa[x]) x=fa[x]; while(u!=x){ t=fa[u];fa[u]=x;u=t; } return x;}inline void un(int u,
2021-08-23 00:20:41
93
原创 多线程学习笔记6
std::shared_future这个对象的get()可以调用多次int run1( ){ cout<<"thread_id : "<<std::this_thread::get_id()<<endl; for(int i=1;i<=1e2;i++){ cout<<1; } std::chrono::seconds dura(2);//等待5秒 std::this_thread::sleep_for(dura);//休息dura
2021-08-23 00:06:08
138
原创 维护有删除操作的动态区间中位数
维护有删除操作的动态区间中位数一般常用的维护区间中位数的方法是用大顶堆与小顶堆来操作但是如果涉及到删除操作那么用这种方法便不是很好操作(也许是我太菜)构造开始我们维护删除操作的方法就是用set模拟大小顶堆那么既然用的set,那么我们的区间里的每个数都必须是不同的 , 我大概想了下 , 如果要有相同值的话 , 我们就要用map了 ,这里我直接贴set的代码了,有空再更新map的代码,对了,用map来维护的话,我们记得要erase掉map的value==0的key这样才能保证我们的取begin值是最大
2021-08-20 23:33:57
439
原创 Codeforces Round #739 (Div. 3)
Codeforces Round #739 (Div. 3)A. Dislike of Threes解题思路:暴力AC代码:#include<iostream>#include<queue>#include<string>#include<string.h>#include<algorithm>#include<cstdio>#include<map>#include<set>#in
2021-08-19 12:15:43
173
原创 多线程学习笔记5
std::asyncstd::future#include<future>std::async是一个函数模板 , 用来启用一个异步任务 , 启动起来之后 , 返回一个std::future(类模板)对象启动一个异步任务 : 创建一个线程并开始执行对应的线程入口函数 , 返回一个std::future对象std::future里面就含有线程入口函数返回的结果( 线程返回结果 ) , 我们通过调用它的成员函数get()来获取std::future提供了一种访问异步操作结果的机制
2021-08-17 21:31:52
154
原创 Making the Grade [kuangbin带你飞]刷题记录
Making the Grade题目链接核心思想 :暴力枚举版的dp我们可以发现一个结论 : 只要a[i]需要改变 , 那么它一定会等于它前面那个最终确定值或者后面那个最终确定值即就是这个 :只要a[i]需要改变那么b[i]==b[i-1]或者a[i-1]或者b[i+1]或者a[i+1]推到这里了我们就可以直接dp枚举出答案了AC代码#include<iostream>#include<queue>#include<string>#include
2021-08-16 20:26:34
117
原创 Phalanx [kuangbin带你飞]刷题记录
Phalanx题目链接核心思想 :dp我们可以观察出一个结论 : 以点(i,j)为左下角的边长为k对称矩阵那么以点(i-1,j+1)为左下标边长为k-1的矩阵一定对称 , 而我们只有推出了点(i-1,j+1)为左下标边长为k-1的矩阵是对称矩阵那么就只需要检查下边和左边就知道点(i,j)为左下角的边长为k对称矩阵是否存在了AC代码#include<iostream>#include<queue>#include<string>#include<
2021-08-16 20:04:18
93
原创 Doing Homework [kuangbin带你飞]刷题记录
Doing Homework题目链接核心思想:状压dp假设有一个集合里的作用都已做完 , 比如是[1,2,4]那么最后做完集合[1,2,3,4,]=max{ ( [2,3,4]+最后做1 ) , ( [1,3,4]+最后做2 ) , ( [1,2,4]+最后做3 ) ( [1,2,3]+最后做4 )}同理每个集合的最优状态一定是上一个状态最优解分+最后做的这个元素的分用2机制存转态进行转移即可AC代码...
2021-08-15 20:11:41
133
原创 多线程学习笔记4
std::condition_variablenotify_one()waitclass A{public: std::unique_lock<std::mutex> my_move(){ std::unique_lock<std::mutex> tem(my_mutex1); return tem; } void inmRQ(){ for(int i=1;i<=100000000;i++){ cout<<
2021-08-13 21:50:22
189
原创 多线程学习笔记3
std::lock()一次锁住>=2个互斥量 (谨慎使用)它不存在因为多个线程因为锁的顺序而导致的死锁风险只有同时锁住才会继续向下执行(要么都锁住,要么都不锁)std::lock(my_mutex1,my_mutex2,..);my_mutex1.unlock();//解锁还是要继续写my_mutex2.unlock();std::adopt_lock在用这个参数前,我们一定要记得先lockstd::lock()与std::lock_guard结合使用有了std::adop
2021-08-11 23:47:52
163
原创 多线程学习笔记2
创建多个线程vector<thread> g;void myjob(int num){ cout<<num<<endl;}for(int i=1;i<=10;i++){ g.push_back(thread (myjob,i));}for(auto item=g.begin();item!=g.end();item++){ item->join();}线程执行的顺序是乱的 , 这与操作系统内部对线程的运行调度机制有关数据共享
2021-08-10 21:46:03
249
原创 Codeforces Round #737 (Div. 2) C题补题记录
Codeforces Round #737 (Div. 2) C题补题记录C. Moamen and XOR 题目链接题目大意 : 给一个大小为 n 的数组 a , 所有ai满足 ai<2^k求满足 a1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕ana1&a2&a3&…&an≥a1⊕a2⊕a3⊕…⊕an. 的a数组数目简记为x>=y思路 : 先分奇偶讨论 , 然后按每一位去讨论n%2==0时每一位只
2021-08-10 11:35:55
125
原创 多线程学习笔记1
多线程注 : 看着视频教程的手写笔记 , 如有错误 , 评论更正#include<iostream>#include<cstdio>#include<thread>#include<stdlib.h> using namespace std;void myprint(){ cout<<"子线程开始了"<<endl; cout<<"子线程结束了"<<endl;}int ma
2021-08-09 00:02:30
341
原创 The Shortest Path in Nya Graph [kuangbin带你飞]刷题记录
- The Shortest Path in Nya Graph核心思想,将每一层建立俩个辅助点,如图,让该层的所有点与这两个点相连,边权分别为c与0,就成功地把建边的时间复杂度大大缩小了,如图AC代码#include<iostream>#include<queue>#include<string>#include<string.h>#include<algorithm>#include<cstdio>#inc
2021-08-06 22:16:17
148
原创 图论最短路模板
最短路模板floyed核心思想 : 在两点间不断插入其他点看是否可以让最短距离变小int dis[maxn][maxn];int path[maxn][maxn];void floyed(){ for(int i=1;i<=n;i++){//初始化 for(int j=1;j<=n;j++){ dis[i][j]=1e9; if(i==j) dis[i][j]=0; } }
2021-08-04 20:02:39
138
原创 树状数组模板
树状数组模板基础ll c[500005];int n;inline int lowbit(int x){return x&(-x);}inline void update(int x,ll val){//x是位置 val是该位置的改变量 for( ; x<=n ; x+=lowbit(x) ) c[x]+=val;}inline ll query( int x ){//询问前缀和 ll sum=0; for( ; x>0 ; x-=lowbit(x
2021-07-26 23:14:00
88
原创 八数码 || 九宫重排(A*搜索代码)
八数码 || 九宫重排废话:这道题如果我们用bfs确实可以跑,但是大概率会炸掉,这道题是可以双向bfs,但今天我要展示的是用A*搜索的代码策略分析:1,标记:既然是搜索,那我们就肯定就要加标记,来避免重复搜索,这里是九个格子,我们假定就是0,那么这个九宫格的每一个状态都可以用一个int数据来表示,这是我们很容易就想到了用 map<int,bool>映射作为标记我们已经访问过的点.map<int,bool> vis;2,A*启发式搜索:A*的思想并不难,就是在选择下一
2021-05-24 21:12:59
1159
原创 最短路-反向建边(附图详解)
最短路反向建边题目问题:通过对最短路的学习,我们很容易地学会了如何求一个起点到任一终点的最短距离,但如果我们要求多个起点到一个终点的最短距离给怎么求呢?PS : 当然,我们这里讨论都是有向图,因为无向图起点到终点的最短距离就等于终点到起点的最短距离还有就是这里讨论的都是点比较多的情况(点少当然就用Floyd啦)其实想要解决这个问题我们反向建边就行了吖.首先,我们先来看一个正常的有向图这时我们假设我们的终点是1,我们要求其他点到终点1的最短距离下面张图表示的是5到终点1和4到终点
2021-05-03 00:52:00
1817
3
原创 c++(升序数组+降序数组)二分函数的使用
#include <iostream>#include <algorithm>using namespace std;int a[10]={9,8,8,7,6,6,6,5,4,0};int main(){ int tem; tem=lower_bound(a,a+10, 9 ,greater<int>())-a; cout<<tem<<"endl";//0 tem=lower_bound(a,a+10,
2021-05-01 00:17:40
643
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人