自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【YBTOJ】矩阵最值

思路:直接一个二维ST表模板codecodecode#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n, m, q;int f[300][300][20][20];int main(){ scanf("%d%d%d", &n, &m, &q); for(int i=1; i<=n; i++) for(int..

2021-05-30 15:52:44 24

原创 【YBTOJ】与众不同

思路:last[i]表示上次i出现的位置p[i]表示这个序列的起始位置显然长度=i-p[i]+1然后对于一个区间l~r,把它分为两部分,一部分可以直接求出答案,表明p[i]<l,另一部分要求最大长度显然二分可以得到最大值就用ST表codecodecode#include<iostream>#include<cstdio>#include<cmath> using namespace std;int inf=1e6+1;int la..

2021-05-27 17:18:30 33

原创 【YBTOJ】静态区间

思路:依然的ST表模板codecodecode#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n, m;int f[1001000][31];int gcd(int x, int y){ if(y==0) return x; return gcd(y, x%y);}int main(){ scanf("%d%d", &..

2021-05-22 17:08:14 17

原创 【YBTOJ】数列区间

思路:ST表模板codecodecode#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n, m;int f[1001000][31];int main(){ scanf("%d%d", &n, &m); for(int i=1; i<=n; i++) { int x; scanf("%d", &x)..

2021-05-22 16:51:07 14

原创 【YBTOJ】区间修改区间查询2

思路:和一维区间修改区间查询一样,用二维树状数组做,式子就是:∑i=1n∑j=1ma[i]=∑i=1n∑j=1m∑k=1i∑h=1jdi,j\sum_{i=1}^{n}\sum_{j=1}^{m}a[i]=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{i}\sum_{h=1}^{j}d_{i,j}i=1∑n​j=1∑m​a[i]=i=1∑n​j=1∑m​k=1∑i​h=1∑j​di,j​分别用4个树状数组维护即可...

2021-05-22 15:03:36 12

原创 【YBTOJ】单点修改区间查询2

思路:二维树状数组codecodecode#include<iostream>#include<cstdio>#include<cstring>using namespace std;long long n, m;long long c[5000][5000];long long lowbit(long long x){return x & -x;}void add(long long x, long long y, long ..

2021-05-22 11:22:27 10

原创 【YBTOJ】区间修改区间查询

思路:用一个差分数组,将x~y每一个数加k,只需要在x位置加k,在y+1位置减k就行了那么此时a[i]就是差分数组中1~i的和∑i=1nai=∑i=1n∑j=1idi\sum_{i=1}^{n}a_i=\sum_{i=1}^{n}\sum_{j=1}^{i}d_ii=1∑n​ai​=i=1∑n​j=1∑i​di​然后可以变成∑i=1nai=∑i=1n(di∗(n+1)−di∗i)\sum_{i=1}^{n}a_i=\sum_{i=1}^{n}(d_i*(n+1)-d_i*i)i=1∑n​ai..

2021-05-22 09:46:19 32

原创 【YBTOJ】严格上升子序列数

思路:首先不难想出最暴力的做法,三重循环的DP,直接炸开考虑怎么优化只有当a[k]<a[i]的时候才会进行累加,那不就是一个类似于逆序对的做法吗?然后直接用树状数组统计就行了codecodecode#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;long long T, t, tot;lon..

2021-05-21 21:26:46 58

原创 【YBTOJ】逆序对

思路:我们可以先把a数组离散化然后我们用一个树状数组将a[i]的位置加1,然后去寻找比他先出现的且a[i]比他大的,这样用树状数组即可完成codecodecode#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n, tot;int a[1000100], p[1001000], c[1000100];void lsh(){ for(..

2021-05-21 18:48:49 23

原创 【YBTOJ】单点修改区间查询

codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, q;long long a[1001000], c[1000100];long long lowbit(long long x){ return x&-x; }void add(long long x, long long y){ for(; x<=n; x+=lowbit(x)) ..

2021-05-20 16:43:47 14

原创 【Luogu_P5253】丢番图

题目描述思路:直接因式分解得:(x-n)(y-n)=n^2考虑将N^2质因数分解,那就是N的质因数分解的所有指数*2然后排列组合,求出所有情况,最后因为要分成两个数相乘,那就/2codecodecode#include<iostream>#include<cstdio>#include<cmath> using namespace std;long long n;int main(){ scanf("%lld", &n);

2021-05-15 16:51:50 15

原创 【Luogu_P5465】Dirichlet 前缀和

思路:我们先用欧拉筛筛出所有质数,然后枚举每个数的约数j(用质数来枚举),将有贡献的加进去codecodecode#include<iostream>#include<cstdio>#include<cmath>#define uint unsigned intusing namespace std;uint seed;uint n, ans;uint prime[20000010], a[20000010], v[20000010], cnt..

2021-05-15 16:45:42 8

原创 【YBTOJ】恒星的亮度

思路:把比……大转换成小,然后跑一遍tarjan如果发现一个环里不是全部都相等,那么就无解然后直接一个拓扑DP求亮度就行了codecodecode#include<iostream>#include<cstdio>#include<queue>using namespace std;struct node{ long long from, to, next, w;}b[1000010], b1[1000010];long long n,..

2021-05-15 10:42:56 30

原创 【YBTOJ】最大半连通子图

题意:半连通图:任意两个点之间有一条路(不一定两两互相到达)思路:分析一波,发现最大的半连通子图一定是一条链,因为如果有一个旁生出的点,那么这个点一定有一些点是到达不了的(自己举例试一试)首先,tarjan缩点然后我们先用排序把边去重这时设一个f[i]表示到第i的最长路径是多少,ans[i]表示到第i个点的最长路径有多少条然后直接拓扑DPcodecodecode#include<iostream>#include<cstdio>#include<..

2021-05-14 20:33:40 20

原创 【YBTOJ】受欢迎的牛

思路:不管怎样,先tarjan缩点得出结论,如果一个点没有出度,那么它就是那个受欢迎的点,因为没有出度所以所有点都只能连向它,然后通过连通性就得出它会被所有点联通。如果有两个点出度为0,那么就没有受欢迎的点,因为这两个点不能相互到达然后就统计就好了codecodecode#include<iostream>#include<cstdio>#include<queue>using namespace std;int n, m, tot, cnt..

2021-05-05 17:04:57 16

原创 【YBTOJ】有向图缩点

思路:直接一个tarjan然后跑一遍dp+拓扑就A了,板子codecodecode#include<iostream>#include<cstdio>#include<queue>using namespace std;int n, m, tot, cnt, tmp, tot1;int stack[10010], top, ru[10010];int a[10010], head[10010], head1[10010];int dfn[10..

2021-05-05 16:59:03 33

原创 【YBTOJ】工作安排

思路:我们考虑贪心,如果当前工作可选,那么就把它加入要做行列中,否则就在要做行列中选择一个利润最小的踢出。当然一切在截至时间升序下进行codecodecode#include<iostream>#include<cstdio>#include<queue>#include<algorithm>using namespace std;long long n, ans, m, maxx;struct node{ long long..

2021-05-05 10:06:33 25

原创 【YBTOJ】龙珠游戏

思路:这题可以用贪心,每次取最大的,然后如果最大的去不了就取第二大的如果有数被取了,那么我们设一个next数组,表示当前i的后一个没被取的数是多少,然后每次取后更新就可以了codecodecode#include<iostream>#include<cstdio>#include<queue>using namespace std;int n;int a[100100];priority_queue<pair<int, int &..

2021-05-04 10:00:18 36

原创 【YBTOJ】序列合并

思路:

2021-05-04 08:27:50 51

原创 【YBTOJ】合并果子

思路:直接用堆来做codecodecode#include<iostream>#include<cstdio>#include<queue>using namespace std;int n;priority_queue<int> q;int main(){ scanf("%d", &n); for(int i=1; i<=n; i++) { int x; scanf("%d", &x); ..

2021-05-04 07:55:04 19

原创 【YBTOJ】汽车加油

思路:考虑用dij如果当前点有油而且油没满,那么就判断一下加油的情况如果当前点没油而且油没满,那么就判断一下建油加油的情况如果当前还可以走,那么就尝试往4个方向拓展的情况然后就AC了codecodecode#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<cmath>using namespace std;int ..

2021-05-03 21:56:20 30

原创 【YBTOJ】最优贸易

思路:我们直接考虑一个中转点,从1到它的最小买入值是多少,和它到n的最大卖出值,然后相减得出答案此过程就用两个spfa来解决codecodecode#include<iostream>#include<queue>#include<cstdio>using namespace std;int n, m, tot1, tot;int a[100100];struct node{ int to, next, w;}b[1001000], b..

2021-05-03 19:40:45 22

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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