线段树

#include<cstdio>
using namespace std;
int n,p,a,b,m,x,y,ans;
struct node
{
int l,r,w,f;
}tree[];
inline void build(int k,int ll,int rr)//建树
{
tree[k].l=ll,tree[k].r=rr;
if(tree[k].l==tree[k].r)
{
scanf("%d",&tree[k].w);
return;
}
int m=(ll+rr)/;
build(k*,ll,m);
build(k*+,m+,rr);
tree[k].w=tree[k*].w+tree[k*+].w;
}
inline void down(int k)//标记下传
{
tree[k*].f+=tree[k].f;
tree[k*+].f+=tree[k].f;
tree[k*].w+=tree[k].f*(tree[k*].r-tree[k*].l+);
tree[k*+].w+=tree[k].f*(tree[k*+].r-tree[k*+].l+);
tree[k].f=;
}
inline void ask_point(int k)//单点查询
{
if(tree[k].l==tree[k].r)
{
ans=tree[k].w;
return ;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/;
if(x<=m) ask_point(k*);
else ask_point(k*+);
}
inline void change_point(int k)//单点修改
{
if(tree[k].l==tree[k].r)
{
tree[k].w+=y;
return;
}
int m=(tree[k].l+tree[k].r)/;
if(x<=m) change_point(k*);
else change_point(k*+);
tree[k].w=tree[k*].w+tree[k*+].w;
}
inline void ask_interval(int k)//区间查询
{
if(tree[k].l>=a&&tree[k].r<=b)
{
ans+=tree[k].w;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/;
if(a<=m) ask_interval(k*);
if(b>m) ask_interval(k*+);
}
inline void change_interval(int k)//区间修改
{
if(tree[k].l>=a&&tree[k].r<=b)
{
tree[k].w+=(tree[k].r-tree[k].l+)*y;
tree[k].f+=y;
return;
}
if(tree[k].f) down(k);
int m=(tree[k].l+tree[k].r)/;
if(a<=m) change_interval(k*);
if(b>m) change_interval(k*+);
tree[k].w=tree[k*].w+tree[k*+].w;
}
int main()
{
scanf("%d",&n);//n个节点
build(,,n);//建树
scanf("%d",&m);//m种操作
for(int i=;i<=m;i++)
{
scanf("%d",&p);
ans=;
if(p==)
{
scanf("%d",&x);
ask_point(x);//单点查询,输出第x个数
printf("%d",ans);
}
else if(p==)
{
scanf("%d%d",&x,&y);
change_point();//单点修改
}
else if(p==)
{
scanf("%d%d",&a,&b);//区间查询
ask_interval();
printf("%d\n",ans);
}
else
{
scanf("%d%d%d",&a,&b,&y);//区间修改
change_interval();
}
}
}

KMP

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
char a[];
char b[];
int nxt[];
int la,lb;
void makenext()
{
int k=-,j=;
nxt[j]=k;
while(j<lb)
{
if(k==-||b[j]==b[k])
{
k++,j++;
nxt[j]=k;
}
else
k=nxt[k];
}
}
void kmp()
{
makenext();
int i=,j=;
while(i<la)
{
if(j==-||a[i]==b[j])
j++,i++;
else
j=nxt[j];
if(j==lb)
{
cout<<i-lb+<<endl;
j=,i--;
}
}
}
int main()
{
cin>>a;
cin>>b;
la=strlen(a);
lb=strlen(b);
kmp();
for(int i=;i<=lb;i++)
cout<<nxt[i]<<" ";
return ;
}

HASH

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#define num 500003
using namespace std;
int hash[*num];
int star[];
bool vis[];
int main()
{
memset(hash,-,sizeof(hash));
int n;
cin>>n;
for(int i=;i<n;i++)
{
int x;
bool mark=;
cin>>x;
int y=abs(x)%num;
while(hash[y]>=-)
{
if(hash[y]==x)
{
mark=;
break;
}
y++;
}
hash[y]=x;
if(mark==)
cout<<;
else
cout<<;
}
return ;
}

模板来源

http://www.cnblogs.com/IUUUUUUUskyyy/

 

最新文章

  1. ie6、7 下input的边框问题 ?
  2. js中function参数默认值
  3. Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
  4. java开源时间/日期库Joda-Time
  5. Android程序意外Crash后自动重启
  6. oracel数据库基本知识和基本查询方法
  7. Android(java)学习笔记89:泛型概述和基本使用
  8. Linq to XML 读取XML 备忘笔记
  9. I - Navigation Nightmare-poj 1984
  10. dataGuard主备库角色切换
  11. Python 目录操作(转)
  12. ThinkPHP5高阶实战教程
  13. PhoenixFD插件流体模拟——UI布局【Foam】详解
  14. if else; while; break;continue ----流程控制系列
  15. [C++]PAT乙级1010. 一元多项式求导 (25/25)
  16. 2018.10.29 bzoj4564: [Haoi2016]地图(仙人掌+莫队)
  17. Python - for 循环
  18. 使用jQuery实现图片懒加载原理
  19. python webdriver 显示等待-自动登录126邮箱,添加联系人
  20. HTTP协议图--HTTP 协议报文结构

热门文章

  1. thrift配置——windows客户端与linux服务端通信(C++)
  2. BZOJ3834:Solar Panels (分块)
  3. 第十一篇 .NET高级技术之内置泛型委托
  4. Jury Meeting CodeForces - 854D
  5. python浅拷贝深拷贝
  6. MongoDB管理练习
  7. js修改物理返回键功能
  8. wp跳转到评价界面代码
  9. AndroidStudio中使用SVN
  10. 使用vbScript 链接SQLserver数据库和基础操作