题目链接:牛牛的Link Power II

题意:给你一个只含$0$和$1$的串,定义串的$Link$值为串中两个的$1$之间的距离的和,$(u,v)$和$(v,u)$被看认为是同一对,有$m$次操作,每次操作可以把串中某个$1$变为$0$,或者把某个$0$变为$1$,求一开始和每次操作后串的$Link$值。

思路:线段树,维护区间内$1$的数量$cnt、$区间的$Link$值$w、$区间内所有的$1$到区间左边界的距离之和$dl、$区间内所有的$1$到区间右边界的距离之和$dr$,查询时只要输出$tree[1].w$即可,修改时只用改变区间内$1$的$cnt$,然后进行区间合并,区间合并的公式画个图推导一下即可。

#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; typedef long long ll; const int N = ;
const ll mod = ; struct node {
int l, r;
ll dl, dr, w, cnt;
}; node tree[ * N];
char s[N];
int n, q; void update(int k)
{
tree[k].cnt = tree[ * k].cnt + tree[ * k + ].cnt;
ll t = tree[ * k].cnt * tree[ * k + ].dl + tree[ * k + ].cnt * tree[ * k].dr;
tree[k].w = tree[ * k].w + tree[ * k + ].w + t + tree[ * k].cnt * tree[ * k + ].cnt;
tree[k].dl = tree[ * k].dl + tree[ * k + ].dl + tree[ * k + ].cnt * (tree[ * k].r - tree[ * k].l + );
tree[k].dr = tree[ * k].dr + tree[ * k + ].dr + tree[ * k].cnt * (tree[ * k + ].r - tree[ * k + ].l + );
} void build(int k, int lef, int rig)
{
tree[k].l = lef, tree[k].r = rig;
if (tree[k].l == tree[k].r) {
tree[k].w = tree[k].dl = tree[k].dr = ;
if ('' == s[tree[k].l]) tree[k].cnt = ;
else tree[k].cnt = ;
return;
}
int mid = (lef + rig) / ;
build(k * , lef, mid);
build(k * + , mid + , rig);
update(k);
} void change_point(int k, int x, int y)
{
if (tree[k].l == tree[k].r) {
tree[k].cnt = y;
return;
}
int mid = (tree[k].l + tree[k].r) / ;
if (x <= mid) change_point( * k, x, y);
else change_point( * k + , x, y);
update(k);
} int main()
{
scanf("%d%s", &n, s + );
build(, , n);
printf("%lld\n", tree[].w % mod);
scanf("%d", &q);
while (q--) {
int kd, pos;
scanf("%d%d", &kd, &pos);
change_point(, pos, == kd ? : );
printf("%lld\n", tree[].w % mod);
}
return ;
}

2020牛客寒假算法基础集训营3 - G. 牛牛的Link Power II(线段树)的更多相关文章

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

    https://ac.nowcoder.com/acm/contest/3004/G 发现每个“1”对于它本身位置产生的影响贡献为0,对前面的“1”有产生贡献,对后面的"1"也产生 ...

  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. my bug of VG algorithm

    def visibility_graph(series): g = nx.Graph() # convert list of magnitudes into list of tuples that h ...

  2. ECharts实现拖拽

    1.需求——如何在echarts中实现托拖拽的效果 2.解决方案 1.用Echarts的type为graph类型画图,优点:拖拽不用重新定点划线,有自带的连线关系,缺点:连线的样式及特效不能很好呈现 ...

  3. json字符串和object之间的相互转化

    package asi; import java.util.ArrayList; import com.alibaba.fastjson.JSON; import com.alibaba.fastjs ...

  4. 常见python面试题

    1,简述列举了解的编程语言及语言间的区别? Python 解释型语言,代码简洁,易懂 C语言 编译型语言,底层语言 c++ 编译型语言,在C语言基础上加了面向对象 Java 混合型语言,可拓展性高 G ...

  5. js中float失精

    https://juejin.im/post/5aa1395c6fb9a028df223516 把小数转为整数,然后计算 https://www.html.cn/archives/7340

  6. 进程管理 supervisor

    背景知识: supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这 ...

  7. JavaWeb项目中的Servlet

    1.创建Servlet 2.在jsp中用ajax调用 $.post("<%=request.getContextPath()%>/AjaxValidationServlet&qu ...

  8. Is It Good To Use LED Wall Light In Household Space?

    Wall lamps are mostly used for local lighting, can play a very decorative effect, improve the visual ...

  9. (c#)独一无二的出现次数

    题目 解

  10. 购物单 && 动态规划 && 背包问题

    题目叙述的言语倒是蛮多的: 王强今天很开心,公司发给N元的年终奖.王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 ...