https://ac.nowcoder.com/acm/contest/3004/G

发现每个“1”对于它本身位置产生的影响贡献为0,对前面的“1”有产生贡献,对后面的"1"也产生贡献,用三个树状数组去维护,第一个维护“1”的个数,第二个每个“1”的位置,第三个维护“1”的贡献的前缀和,对于每个“1”的贡献,计算出对前面1的贡献和对后面1的贡献,之和在第一个树状数组中更新这个位置1的个数,第二个树状数组中更新这个1的pos,第三个树状数组中就是更新这个“1”对答案的贡献了
 
  1. #include<bits/stdc++.h>
  2. typedef long long ll;
  3. using namespace std;
  4. const ll mod = 1e9+;
  5. const int maxn = 1e5+;
  6. ll c1[maxn],c2[maxn],c3[maxn];
  7. int n;
  8. ll lowbit(ll x){
  9. return x&-x;
  10. }
  11. void add1(ll x, ll k) {
  12. while (x <= n) { //不能越界
  13. c1[x] = c1[x] + k;
  14. x = x + lowbit(x);
  15. }
  16. }
  17. void add2(ll x, ll k) {
  18. while (x <= n) { //不能越界
  19. c2[x] = (c2[x] + k);
  20. x = x + lowbit(x);
  21. }
  22. }
  23. void add3(ll x,ll k){
  24. while (x <= n) { //不能越界
  25. c3[x] = (c3[x] + k);
  26. x = x + lowbit(x);
  27. }
  28. }
  29. ll getsum1(int x) { // a[1]……a[x]的和
  30. ll ans = ;
  31. while (x >= ) {
  32. ans = ans + c1[x];
  33. x = x - lowbit(x);
  34. }
  35. return ans;
  36. }
  37. ll getsum2(int x) { // a[1]……a[x]的和
  38. ll ans = ;
  39. while (x >= ) {
  40. ans = (ans + c2[x]);
  41. x = x - lowbit(x);
  42. }
  43. return ans;
  44. }
  45. ll getsum3(int x) { // a[1]……a[x]的和
  46. ll ans = ;
  47. while (x >= ) {
  48. ans = (ans + c3[x]);
  49. x = x - lowbit(x);
  50. }
  51. return ans;
  52. }
  53. int main()
  54. {
  55. scanf("%d",&n);
  56. string s;
  57. cin>>s;
  58. ll pos = ,ans = ,cnt = ;
  59. for(int i = ;i<n;i++){
  60. if(s[i] == '') add1(i+,),add2(i+,i+);
  61. }
  62. ll t = ;
  63. for(int i = ;i<n;i++){
  64. if(s[i] == '') cnt++,t = (t + i + ),ans = ( cnt*(i+) - t ),add3(i+,ans);
  65. } // pos = (pos + i)%mod,cnt++,ans = (ans + cnt*i-pos)%mod;
  66. int m;scanf("%d",&m);
  67. printf("%lld\n",getsum3(n)%mod);
  68. while(m--){
  69. ll q,pos;
  70. cin>>q>>pos;
  71. if(q == ){
  72. add1(pos,);
  73. add2(pos,pos);
  74. ll tmp = getsum1(pos)*pos-getsum2(pos);
  75. tmp = ( tmp + (getsum2(n)-getsum2(pos) - (getsum1(n)-getsum1(pos))*pos)) ;
  76. add3(pos,tmp);
  77. }
  78. else{
  79. ll tmp = getsum1(pos)*pos-getsum2(pos);
  80. tmp = ( tmp + (getsum2(n)-getsum2(pos) - (getsum1(n)-getsum1(pos))*pos)) ;
  81. add3(pos,-tmp);
  82. add1(pos,-);
  83. add2(pos,-(pos));
  84. }
  85. ll ans = getsum3(n)%mod;
  86. printf("%lld\n",ans);
  87. }
  88. return ;
  89. }
 

2020牛客寒假算法基础集训营3 G.牛牛的Link Power II (树状数组维护前缀和)的更多相关文章

  1. 2020牛客寒假算法基础集训营3 - G. 牛牛的Link Power II(线段树)

    题目链接:牛牛的Link Power II 题意:给你一个只含$0$和$1$的串,定义串的$Link$值为串中两个的$1$之间的距离的和,$(u,v)$和$(v,u)$被看认为是同一对,有$m$次操作 ...

  2. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II

    题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于当前的格子时只能往下边走,而'B'表示向右向下均可以走 ...

  3. 2020牛客寒假算法基础集训营5 G街机争霸

    题目描述 哎,又是银首,要是你这个签到题少WA一发就金了 牛牛战队的队员打完比赛以后又到了日常甩锅的时间.他们心情悲伤,吃完晚饭以后,大家相约到一个街机厅去solo.牛牛和牛能进入了一个迷宫,这个迷宫 ...

  4. 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)

    https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...

  5. 2020牛客寒假算法基础集训营4 G音乐鉴赏

    题目描述 作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎.但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下! 为了应对这个调整,你要求所有 ...

  6. 2020牛客寒假算法基础集训营5 B.牛牛战队的比赛地 (二分/三分)

    https://ac.nowcoder.com/acm/contest/3006/B 三分做法 #include<bits/stdc++.h> #define inf 0x3f3f3f3f ...

  7. 2020牛客寒假算法基础集训营2 J题可以回顾回顾

    2020牛客寒假算法基础集训营2 A.做游戏 这是个签到题. #include <cstdio> #include <cstdlib> #include <cstring ...

  8. 2020牛客寒假算法基础集训营1 J题可以回顾回顾

    2020牛客寒假算法基础集训营1 这套题整体来说还是很简单的. A.honoka和格点三角形 这个题目不是很难,不过要考虑周全,面积是1,那么底边的长度可以是1也可以是2, 注意底边1和2会有重复的, ...

  9. 2020牛客寒假算法基础集训营4-F树上博弈

    链接:https://ac.nowcoder.com/acm/contest/3005/F来源:牛客网 题目描述 现有一个 n 个点,n-1条边组成的树,其中 1 号点为根节点. 牛牛和牛妹在树上玩游 ...

随机推荐

  1. (转)elasticsearch collapse 折叠字段应用

    转自:https://elasticsearch.cn/article/132 在 Elasticsearch 5.x 有一个字段折叠(Field Collapsing,#22337)的功能非常有意思 ...

  2. Spark应用开发调优要点总结

    调试Spark应用性能的时候,首先应该理解spark是如何工作以及你的spark应用需要何种类型的资源.比如说,机器学习相关的spark应用更依赖cpu计算能力,ETL应用更依赖I/O能力,以此进行有 ...

  3. centos7下NAT模式下设置静态ip

    1.在虚拟网络编辑器下查看子网IP.子网掩码以及网关 2.在Linux系统中进入 /etc/sysconfig/network-scripts目录下,编辑ifcfg-ens33文件,改成下面的内容: ...

  4. Electron+Vue – 基础学习(1): 创建项目

    Electron 和 Vue 都是干啥的,就不做过多介绍了,可以去官网瞅瞅.下面总结 Electron+Vue 创建项目,Electron + Vue 创建项目实际上相当于:创建Vue项目 + Ele ...

  5. 如何阻止a标签跳转

    <a href="www.baidu.com">百度</a> 上面为我们的a标签,要想阻止它进行跳转我们该怎么办呢? 当然我们有以下的几种办法_______ ...

  6. 安全师(网络安全类pdf电子书籍)

    2020-02-17  天气晴,西安. 今天找到一个可以下载网络安全(渗透,kali,web)电子书籍网站. https://www.secshi.com/

  7. 【机器学习】使用CNN神经网络实现对图片分类识别及模型转换

    仅做记录,后面慢慢整理 训练函数: from skimage import io, transform # skimage模块下的io transform(图像的形变与缩放)模块 import glo ...

  8. 第十届蓝桥杯CB题目I-分析

    思路分析://感谢写文博主 思路:相信大多数人和我一样在比赛的时候把这题想的太简单了_(:з」∠)_ 这题和去年的最后一题很类似,就是分类讨论,去年放在了最后一题,今年在倒数第二题,说明难度不算太难, ...

  9. Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

    一.断言方法 方法 检查 版本 assertEqual(a,b) a==b   assertNotEqual(a,b) a!=b   assertTrue(x) bool(x) is True   a ...

  10. STM32 & RT-Thread的逆向入门

    STM32 & RT-Thread的逆向入门 backahasten@0xFA ​                现在,各种MCU的价格越来越低,同等条件下能买到的ROM和RAM资源也多了.对 ...