
数据结构
_缘之空_
不要害怕落日的黑暗,因为明天的太阳还会照常升起
展开
-
[SDOI2011]拦截导弹
对于第一问:暴力 dpdpdp 不行,用 CDQCDQCDQ 优化,左右区间合并时确保左边区间已更新好,然后把右区间排序更新左区间对右区间的影响,还原后再递归右区间。对于第二问:概率等于选择当前导弹的方案数除以总方案数,分别求出以这个i结尾和开始的最长上升子序列的长度,当长度相加 −1-1−1 等于最长长度时计算答案,所以再跑一边 CDQCDQCDQ。#include<bits/stdc++.h>#define maxn 200005#define db double#define i原创 2022-02-12 20:47:05 · 303 阅读 · 0 评论 -
【模板】后缀自动机SAM
详细讲解例题有点难懂,关于复杂度的证明见链接。#include<bits/stdc++.h>using namespace std;const int M=2e6+5;struct node{ int ch[26]; int len,fa; node(){memset(ch,0,sizeof(ch));len=0;}}dian[M];vector<int> G[M];int las=1,tot=1;//指向一个空状态long long sum[M],ans;原创 2021-01-02 22:27:18 · 208 阅读 · 1 评论 -
【模板】后缀数组SA
详细讲解例题模板题:用后缀数组计算出 sasasa 和 heightheightheight 后,用一个单调栈就解决了。#include<cstdio>#include<algorithm>#include<cstring>#include<stack>using namespace std;const int M=5e5+5; void write(int x){ if(x<=9){ putchar(x+'0原创 2021-01-02 22:12:14 · 139 阅读 · 0 评论 -
【模板】莫队
普通莫队例题#include<bits/stdc++.h>using namespace std;const int M=5e4+5;long long e,ans;void read(long long &x) { int f=1;x=0;char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9') {x=(x原创 2021-01-02 22:00:58 · 125 阅读 · 0 评论 -
「CCO 2017」专业网络
Kevin 正在一个社区中开发他的专业网络。不幸的是,他是个外地人,还不认识社区中的任何人。但是他可以与 个人建立朋友关系 。然而,社区里没几个人想与一个外地人交朋友。Kevin 想交朋友的 个人都有类似但不同的与外地人交友的准则。在 Kevin 已经直接认识了社区中的 个人后,第 个人就愿意与 Kevin 交朋友了,否则 Kevin 就要付出 的代价与他成为朋友。你的任务是,使 Kevin 与这 个人都交上朋友,并且最小化他付出的代价。输入格式第一行包含整数 。接下来的 行每行包含两原创 2020-07-26 22:39:05 · 626 阅读 · 1 评论 -
关于vector作为二维数组使用
最近几天在学STL,总结一下。最基本的:vector<int> a;//定义一个不定长数组a数组+vector:vector<int> a[3];//定义了一个二维数组,第一维为3,第二维不定长a[1].push_back(1);//可直接压入值cout<<a[1][0];//用二维形式调用vector+vector:vector<vector<int> > a;//定义了一个二维数组,第一维不定长,第二维不定长a.resiz原创 2020-07-22 19:18:04 · 1036 阅读 · 1 评论 -
【模板】主席树
#include<bits/stdc++.h>#define M 200005using namespace std;int n,T;int tot,cnt,it;int a[M],lsh[M],rx[M],ly[M<<5],ry[M<<5],sum[M<<5];void read(int &x) { int f=1;x=0;char c=getchar(); while(c<'0'||c>'9') {if(c=='-'原创 2020-10-31 23:45:21 · 114 阅读 · 0 评论