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

发现每个“1”对于它本身位置产生的影响贡献为0,对前面的“1”有产生贡献,对后面的"1"也产生贡献,用三个树状数组去维护,第一个维护“1”的个数,第二个每个“1”的位置,第三个维护“1”的贡献的前缀和,对于每个“1”的贡献,计算出对前面1的贡献和对后面1的贡献,之和在第一个树状数组中更新这个位置1的个数,第二个树状数组中更新这个1的pos,第三个树状数组中就是更新这个“1”对答案的贡献了
 
 #include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll mod = 1e9+;
const int maxn = 1e5+;
ll c1[maxn],c2[maxn],c3[maxn];
int n;
ll lowbit(ll x){
return x&-x;
}
void add1(ll x, ll k) {
while (x <= n) { //不能越界
c1[x] = c1[x] + k;
x = x + lowbit(x);
}
}
void add2(ll x, ll k) {
while (x <= n) { //不能越界
c2[x] = (c2[x] + k);
x = x + lowbit(x);
}
}
void add3(ll x,ll k){
while (x <= n) { //不能越界
c3[x] = (c3[x] + k);
x = x + lowbit(x);
}
}
ll getsum1(int x) { // a[1]……a[x]的和
ll ans = ;
while (x >= ) {
ans = ans + c1[x];
x = x - lowbit(x);
}
return ans;
}
ll getsum2(int x) { // a[1]……a[x]的和
ll ans = ;
while (x >= ) {
ans = (ans + c2[x]);
x = x - lowbit(x);
}
return ans;
}
ll getsum3(int x) { // a[1]……a[x]的和
ll ans = ;
while (x >= ) {
ans = (ans + c3[x]);
x = x - lowbit(x);
}
return ans;
}
int main()
{
scanf("%d",&n);
string s;
cin>>s;
ll pos = ,ans = ,cnt = ;
for(int i = ;i<n;i++){
if(s[i] == '') add1(i+,),add2(i+,i+);
}
ll t = ;
for(int i = ;i<n;i++){
if(s[i] == '') cnt++,t = (t + i + ),ans = ( cnt*(i+) - t ),add3(i+,ans);
} // pos = (pos + i)%mod,cnt++,ans = (ans + cnt*i-pos)%mod;
int m;scanf("%d",&m);
printf("%lld\n",getsum3(n)%mod);
while(m--){
ll q,pos;
cin>>q>>pos;
if(q == ){
add1(pos,);
add2(pos,pos);
ll tmp = getsum1(pos)*pos-getsum2(pos);
tmp = ( tmp + (getsum2(n)-getsum2(pos) - (getsum1(n)-getsum1(pos))*pos)) ;
add3(pos,tmp);
}
else{
ll tmp = getsum1(pos)*pos-getsum2(pos);
tmp = ( tmp + (getsum2(n)-getsum2(pos) - (getsum1(n)-getsum1(pos))*pos)) ;
add3(pos,-tmp);
add1(pos,-);
add2(pos,-(pos));
}
ll ans = getsum3(n)%mod;
printf("%lld\n",ans);
}
return ;
}
 

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. ssh远程连接到Ubuntu

    1.ubuntu首先得安装ssh sudo apt-get install openssh-server 2.启动ssh sudo /etc/init.d/ssh start 3.检查是否开启 ps ...

  2. 20200117 .net 001

    第一部分:面向对象 封装 继承(里氏转换) 多态第二部分:值类型.引用类型.字符串操作第三部分:集合文件操作第四部分:正则表达式第五部分:XML操作第六部分:委托.事件第七部分:反射. 1.变量的命名 ...

  3. vue自定义分页组件---切图网

    vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...

  4. SpringCloud踩坑

    今天在使用 SpringCloud 时遇到了一个问题,感觉有不少小伙伴会遇到,所以记录下来 版本说明 SpringBoot 2.2.4.RELEASE SpringCloud Greenwich.SR ...

  5. C# MVC Api无法获得参数

    在MVC中写API时,没有收到参数如何解决? 通过jQuery.POST测试成功.后来又通过F12发送,发现始终无法收到参数. 注:我的接口接收参数是一个类对象,没有写[FromBody]) [Htt ...

  6. Object类、日期时间类、system类及StringBuilder字符串容器

    一.Object类常用API 1.1 概述 java.lang.Object类是Java语言中的根类,即所有类的父类.Object类中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是 ...

  7. beego的请求数据处理

    我们经常需要获取用户传递的数据,包括 Get.POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据: GetString(key string) string Get ...

  8. Java WebService 简单实例-服务端和客户端

    转载自ITeye:https://www.iteye.com/topic/1135747/

  9. Fiddler: AutoResponder 构建模拟测试场景

    AutoResponder 可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应.可用于调试服务器端代码而无需修改服务器端的代码和配置,因为拦截和重定向后,实际上访问的是本地的文 ...

  10. java文本文件加密

    加密方法是通过输入流对源文件字符逐个读取,对其读取到字符的ascll值进行异或运算,并将其放入新文件中,解密时只要用相同的密钥进行ascll异或运算并向新文件输出即可,即对文件首次用该程序处理为加密, ...