线段树

  1. #include<cstdio>
  2. using namespace std;
  3. int n,p,a,b,m,x,y,ans;
  4. struct node
  5. {
  6. int l,r,w,f;
  7. }tree[];
  8. inline void build(int k,int ll,int rr)//建树
  9. {
  10. tree[k].l=ll,tree[k].r=rr;
  11. if(tree[k].l==tree[k].r)
  12. {
  13. scanf("%d",&tree[k].w);
  14. return;
  15. }
  16. int m=(ll+rr)/;
  17. build(k*,ll,m);
  18. build(k*+,m+,rr);
  19. tree[k].w=tree[k*].w+tree[k*+].w;
  20. }
  21. inline void down(int k)//标记下传
  22. {
  23. tree[k*].f+=tree[k].f;
  24. tree[k*+].f+=tree[k].f;
  25. tree[k*].w+=tree[k].f*(tree[k*].r-tree[k*].l+);
  26. tree[k*+].w+=tree[k].f*(tree[k*+].r-tree[k*+].l+);
  27. tree[k].f=;
  28. }
  29. inline void ask_point(int k)//单点查询
  30. {
  31. if(tree[k].l==tree[k].r)
  32. {
  33. ans=tree[k].w;
  34. return ;
  35. }
  36. if(tree[k].f) down(k);
  37. int m=(tree[k].l+tree[k].r)/;
  38. if(x<=m) ask_point(k*);
  39. else ask_point(k*+);
  40. }
  41. inline void change_point(int k)//单点修改
  42. {
  43. if(tree[k].l==tree[k].r)
  44. {
  45. tree[k].w+=y;
  46. return;
  47. }
  48. int m=(tree[k].l+tree[k].r)/;
  49. if(x<=m) change_point(k*);
  50. else change_point(k*+);
  51. tree[k].w=tree[k*].w+tree[k*+].w;
  52. }
  53. inline void ask_interval(int k)//区间查询
  54. {
  55. if(tree[k].l>=a&&tree[k].r<=b)
  56. {
  57. ans+=tree[k].w;
  58. return;
  59. }
  60. if(tree[k].f) down(k);
  61. int m=(tree[k].l+tree[k].r)/;
  62. if(a<=m) ask_interval(k*);
  63. if(b>m) ask_interval(k*+);
  64. }
  65. inline void change_interval(int k)//区间修改
  66. {
  67. if(tree[k].l>=a&&tree[k].r<=b)
  68. {
  69. tree[k].w+=(tree[k].r-tree[k].l+)*y;
  70. tree[k].f+=y;
  71. return;
  72. }
  73. if(tree[k].f) down(k);
  74. int m=(tree[k].l+tree[k].r)/;
  75. if(a<=m) change_interval(k*);
  76. if(b>m) change_interval(k*+);
  77. tree[k].w=tree[k*].w+tree[k*+].w;
  78. }
  79. int main()
  80. {
  81. scanf("%d",&n);//n个节点
  82. build(,,n);//建树
  83. scanf("%d",&m);//m种操作
  84. for(int i=;i<=m;i++)
  85. {
  86. scanf("%d",&p);
  87. ans=;
  88. if(p==)
  89. {
  90. scanf("%d",&x);
  91. ask_point(x);//单点查询,输出第x个数
  92. printf("%d",ans);
  93. }
  94. else if(p==)
  95. {
  96. scanf("%d%d",&x,&y);
  97. change_point();//单点修改
  98. }
  99. else if(p==)
  100. {
  101. scanf("%d%d",&a,&b);//区间查询
  102. ask_interval();
  103. printf("%d\n",ans);
  104. }
  105. else
  106. {
  107. scanf("%d%d%d",&a,&b,&y);//区间修改
  108. change_interval();
  109. }
  110. }
  111. }

KMP

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6. using namespace std;
  7. char a[];
  8. char b[];
  9. int nxt[];
  10. int la,lb;
  11. void makenext()
  12. {
  13. int k=-,j=;
  14. nxt[j]=k;
  15. while(j<lb)
  16. {
  17. if(k==-||b[j]==b[k])
  18. {
  19. k++,j++;
  20. nxt[j]=k;
  21. }
  22. else
  23. k=nxt[k];
  24. }
  25. }
  26. void kmp()
  27. {
  28. makenext();
  29. int i=,j=;
  30. while(i<la)
  31. {
  32. if(j==-||a[i]==b[j])
  33. j++,i++;
  34. else
  35. j=nxt[j];
  36. if(j==lb)
  37. {
  38. cout<<i-lb+<<endl;
  39. j=,i--;
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. cin>>a;
  46. cin>>b;
  47. la=strlen(a);
  48. lb=strlen(b);
  49. kmp();
  50. for(int i=;i<=lb;i++)
  51. cout<<nxt[i]<<" ";
  52. return ;
  53. }

HASH

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6. #define num 500003
  7. using namespace std;
  8. int hash[*num];
  9. int star[];
  10. bool vis[];
  11. int main()
  12. {
  13. memset(hash,-,sizeof(hash));
  14. int n;
  15. cin>>n;
  16. for(int i=;i<n;i++)
  17. {
  18. int x;
  19. bool mark=;
  20. cin>>x;
  21. int y=abs(x)%num;
  22. while(hash[y]>=-)
  23. {
  24. if(hash[y]==x)
  25. {
  26. mark=;
  27. break;
  28. }
  29. y++;
  30. }
  31. hash[y]=x;
  32. if(mark==)
  33. cout<<;
  34. else
  35. cout<<;
  36. }
  37. return ;
  38. }

模板来源

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

 

线段树、KMP、HASH模板的更多相关文章

  1. 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch

    Kefa and Watch Problem's Link Mean: 给你一个长度为n的字符串s,有两种操作: 1 L R C : 把s[l,r]全部变为c; 2 L R d : 询问s[l,r]是 ...

  2. cf213E 线段树维护hash

    链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a.b,长度分别为n.m,你需要计算有多少个x,使 得\(a_1 + x; a_2 ...

  3. MemSQL Start[c]UP 2.0 - Round 1 F - Permutation 思维+线段树维护hash值

    F - Permutation 思路:对于当前的值x, 只需要知道x + k, x - k这两个值是否出现在其左右两侧,又因为每个值只有一个, 所以可以转换成,x+k, x-k在到x所在位置的时候是否 ...

  4. hdu1698(线段树区间替换模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...

  5. BZOJ 2124: 等差子序列 线段树维护hash

    2124: 等差子序列 Description 给一个1到N的排列{Ai},询问是否存在1<=p1=3),使得Ap1,Ap2,Ap3,…ApLen是一个等差序列. Input 输入的第一行包含一 ...

  6. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  7. POJ 3468:A Simple Problem with Integers(线段树区间更新模板)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 141093 ...

  8. bzoj 2124 等差子序列 (线段树维护hash)

    2124: 等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 1922  Solved: 714[Submit][Status][Discuss ...

  9. 【luogu P3372 线段树1】 模板

    线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...

  10. 【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列

    hash大法好(@ARZhu):大数相乘及时取模真的是件麻烦事情 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次 ...

随机推荐

  1. 洛谷 - P2762 - 太空飞行计划问题 - 最小割

    https://www.luogu.org/problemnew/solution/P2762 最小割对应的点,在最后一次更新中dinic的bfs会把他的dep重置掉.所以可以根据这个性质复原最小割. ...

  2. POJ1503

    大数+++++ #include<cstdio> #include<string.h> #include<iostream> #include<algorit ...

  3. poj 1182 食物链【带权并查集】

    设相等的边权为0,吃的边权为,被吃的边权为2,然后用带权并查集在%3的意义下做加法即可 关系为简单环的基本都可以用模环长的方式是用带权并查集 #include<iostream> #inc ...

  4. 1856: [Scoi2010]字符串(Catalan数)

    1856: [Scoi2010]字符串 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 2117  Solved: 1211[Submit][Status] ...

  5. 【HDU - 1257】最少拦截系统(贪心)

    最少拦截系统 Descriptions: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的 ...

  6. 正睿OI提高组十连测 day1 总结

    可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...

  7. URAL 7077 Little Zu Chongzhi's Triangles(14广州I)

    题目传送门 题意:有n根木棍,三根可能能够构成三角形,选出最多的三角形,问最大面积 分析:看到这个数据范围应该想到状压DP,这次我想到了.0010101的状态中,1表示第i根木棍选择,0表示没选,每一 ...

  8. centOS 部署服务器(一)

    接下来我所写的博客仅仅是为了记录我的学习过程,与其他无关. 由于公司换用了亚马逊服务器,用的是它的RDS数据库,所以就没有像以前的项目部署的时候使用mysql,不过要下载安装mysql-proxy,字 ...

  9. 快速分页:jsp标签pager-taglib

    一:简介 Pager-taglib,支持多种风格的分页显示.实际上它是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组 合,会形成多种不一样的分页页面,风格各异.它既 ...

  10. 自己写的MD5加密原码

    package com.wh.md5; import java.security.MessageDigest; import java.util.Arrays; /** * @author 王恒 * ...