快读模板

这个连算法都算不上。。。

inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}

二分查找

这是我学过的第一个算法qwq

sort(a+1, a+1+n);
bool Find(int x) { //二分查找x在a中是否出现
int l = 1, r = n, mid;
while(l <= r) {
mid = (l+r)>>1;
if(x == a[mid]) return 1;
if(x < a[mid]) r = mid - 1;
else l = mid + 1;
}
return 0;
}

二分答案

bool check() {

}
int main()
{
// 单调递增答案 使最大值最小
int l = (), r = (), mid, ans;
while(l <= r) {
mid = (l+r)>>1;
if(check()) {
ans = mid;
r = mid - 1;
} else l = mid + 1;
}
printf("%d\n",ans);
// 单调递减答案 使最小值最大
int l = (), r = (), mid, ans;
while(l <= r) {
mid = (l+r)>>1;
if(check()) {
ans = mid;
l = mid + 1;
} else r = mid - 1;
}
return 0;
}

离散化

const int N = 1e6+7;
int n;
int a[N],t[N];
int main()
{
n = read();
for(int i=1;i<=n;++i)
t[i] = a[i] = read(); //t[] 是临时数组
sort(t+1, t+1+n);
int m = unique(t+1, t+1+n) - (t+1);
for(int i=1;i<=n;++i)
a[i] = lower_bound(t+1, t+1+m, a[i]) - t;
for(int i=1;i<=n;++i)
printf("%d ",a[i]); //离散化后数组
return 0;
}

ST表 & 倍增一般算法

const int N = 100007;
int n,m;
int lg[N];
int f[N][30]; //f[i,j]表示 [i - 2^j]区间的最大值
void RMQ() {
for(int j=1;j<=21;++j)
for(int i=1;i<=n;++i) if(i+(1<<j)-1 <= n) {
f[i][j] = max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
inline int Query(int l,int r) {
int k = lg[r-l+1];
return max(f[l][k], f[r-(1<<k)+1][k]);
}
int main()
{
n = read(), m = read();
for(int i=1;i<=n;++i)
f[i][0] = read();
RMQ();
for(int i=2;i<=n;++i)
lg[i] = lg[i>>1] + 1;
while(m--) {
int l = read(), r = read();
printf("%d\n",Query(l,r));
}
return 0;
}

KMP

什么?? 我已经不记得KMP的思想了!!??

const int N = 1000007;
int kmp[N];
char a[N],b[N];
int main()
{
cin>>a+1>>b+1;
int la = strlen(a+1), lb = strlen(b+1);
int j = 0;
for(int i=2;i<=lb;++i) {
while(j && b[i]!=b[j+1]) j = kmp[j];
if(b[i] == b[j+1]) ++j;
kmp[i] = j;
}
j = 0;
for(int i=1;i<=la;++i) {
while(j && a[i]!=b[j+1]) j = kmp[j];
if(a[i] == b[j+1]) ++j;
if(j == lb) printf("%d\n",i-lb+1), j = kmp[j];
}
for(int i=1;i<=lb;++i)
printf("%d ",kmp[i]);
return 0;
}

Dfs(有向图)

int vis[N];
void Dfs(int u/*,,,其他状态*/) {
vis[u] = 1; /*其他初始化*/
for(int i=head[u];i;i=edge[i].next /*其他状态转移*/) {
int v = edge[i].to;
if(!vis[v] /*&& 其他限制条件*/) {
//搜索 / 操作
Dfs(v);
//回溯
}
}
}

Bfs(有向图)

int vis[N];
void Bfs(/*传入条件*/) {
memset(vis, 0, sizeof(vis));
queue<int> q;
q.push(1); vis[1] = 1; /*其他初始化*/
while(!q.empty()) {
int u = q.front(); q.pop(); //或是其他结构体(状态空间)
for(int i=head[u];i;i=edge[i].next) {
int v = edge[i].to;
if(!vis[v]) {
/*其他操作*/ vis[v] = 1; q.push(v);
}
}
}
}

并查集

const int N = 1e5+7;
int n,m;
struct UnionFind {
int pre[N];
void Init() {
for(int i=1;i<=n;++i) pre[i] = i;
}
int Find(int x) {
return x==pre[x]?x:pre[x] = Find(pre[x]);
}
void join(int x,int y) {
int fx = Find(x), fy = Find(y);
if(fx != fy) pre[fx] = fy;
}
}B;

树状数组

const int N = 500007;
int n,m;
struct Tree_A { //树状数组
int c[N];
void Add(int x,int y) {
while(x<=n) c[x]+=y, x+=x&-x;
}
int Sum(int x) {
int res = 0;
while(x>0) res += c[x], x-=x&-x;
return res;
}
inline int Query(int x,int y) {
return Sum(y) - Sum(x-1);
}
}T;

CSP-S 赛前模板复习的更多相关文章

  1. wawawa8的模板复习计划

    wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...

  2. CSP前模板复习

    Tarjan 求强连通分量 展开查看 #include #include #include using namespace std; const int N = 1e4 + 1e3; int n, m ...

  3. 模板复习【updating】

    马上就要noi了……可能滚粗已经稳了……但是还是要复习模板啊 LCT: bzoj2049 1A 7min # include <stdio.h> # include <string. ...

  4. NOIP前的模板复习和注意事项

    联赛除去今天刚好只有一个星期了,最后一个星期也很关键,要吃好睡好保持心情愉悦.当然也免不了最后的复习计划. 首先是模板,之前还有很多模板没有复习到,这些东西是一定要落实到位的. 每天往后面写一点... ...

  5. noip模板复习

    自己敲模板还是有很多容易错的地方 写在注释里面了 LCA #include<bits/stdc++.h> #define REP(i, a, b) for(register int i = ...

  6. CSP2019赛前小复习:

    虽然觉得复习也没有什么用,还不吃好睡好,保持好心情. SA: 坑就那几个. \(s[0]=s[n+1]=-1\). 和\(rank\)交换的\(tp\)数组的\(tp[n+1]=0\). 一般加上这两 ...

  7. noip考前模板复习

    网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...

  8. 【 D3.js 选择集与数据详解 — 5 】 处理模板的应用

    在[选择集与数据 - 4]一文中,介绍了一个update.enter.exit的处理模板,这个模板很常用,本文将通过一个例子来讲解其使用方法. 1. 模板 复习一下上一章提到的模板. //绑定数据后, ...

  9. REHの收藏列表

    搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...

随机推荐

  1. C#单元测试Nunit小结

    1. 下载和安装Nunit工具: NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得,然后在系统中安装: 2. 在 ...

  2. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_3 Mybatis中编写dao实现类的使用-修改删除等其他操作

    update和上面的Insert代码基本是一样的,只需要修改这里, 测试Update的方法 删除 findById 测试方法 findByName 测试方法 findTotal

  3. 【Hibernate】---【注解】多对多

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-con ...

  4. yum基本使用方法

    yum 是 Fedora RHEL Centos SUSE等linux 发行版的 软件包管理工具 通过 执行 man yum 查看yum的帮助信息 可以知道 yum makecache 是将服务器上的 ...

  5. Elasticsearch入门(二)

    基础概念 Elasticsearch有几个核心概念,从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味着,从索引一个文档 ...

  6. 【工具】Fiddler使用教程

    目录 概述 2 Fiddler是做什么的,能帮助我们做什么? 2 工作原理 2 代理模式 3 使用场景--提供的功能 3 界面及使用介绍 3 常用功能 10 HOST配置 10 前后端接口连调--Co ...

  7. 关于WordPress中字体加载慢的问题解决方案(转)

    2016-04-15 最近发现Wordpress有时候加载的特别慢,于是就想办法找了下原因.之前听网上说是因为wordpress用的是Google的字体库,而且是每次都要加载,导致访问慢的,于是当时装 ...

  8. [转帖]深度解析区块链POW和POS的区别

    深度解析区块链POW和POS的区别 Proof of Work 还有Proof of Stake 之前理解程了 state ... 股权的意思 还有 delegated proof of Stake ...

  9. sqlplus无法登陆?

    关键词:error 6 initialize sqlplus,ORA-27101: shared memory realm does not exist 1.error 6 initialize sq ...

  10. adb常用命令和抓取log的方法

    一 adb常用的几个命令1. 查看设备adb devices这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 C:\Documents and Settings\ ...