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. mybatis 自学笔记

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.本页作为自学整理资料,信息来源网络,侵权速联,但大部份经过自己测试.使用说明:本人测试用编辑软件eclipse_st ...

  2. js中(function(){})()的写法用处

    直到今天我才明白的一个玩意!!! 来来来,首先嘛,JS中函数有两种命名方式 1.一种是声明式. 而声明式会导致函数提升,function会被解释器优先编译.即我们用声明式写函数,可以在任何区域声明,不 ...

  3. svn cleanup 失败问题解决

    将sqlite3.exe放到.svn的同级目录 4.启动cmd执行sqlite3 .svn/wc.db "select * from work_queue" 5.启动cmd执行sq ...

  4. MRAM技术进入汽车应用

    在整个地址空间范围内读写各种类型的数据.通常MRAM的操作和时序类似于32位微控制器的规范和时序.与DLFASH相比,当今的非易失性存储器可以接受MRAM设备的性能和吞吐量. 与当今的DFLASH相比 ...

  5. PHP0012:PHP操作文件目录

    WIN下文件夹的只读权限是0555

  6. python 复习 day1

    import timeimport json # 二:嵌套取值操作students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]] ...

  7. matlab仿真随机数的产生

    概率论和数理统计实验(matlab中实现) 一.伯努利分布 R=binornd(N,P); //N,P为二次分布的俩个参数,返回服从参数为N,P的二项分布的随机数,且N,P,R的形式相同. R=bin ...

  8. 基于XML的声明式事务控制

    1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  9. Gitee Git bash VSCode操作简易说明

    GIT Git是一个分布式的版本控制系统,只是软件,需要你下载装到电脑上,实现git功能. Github.Gitee基于git的项目托管平台.Github是国外的,连接速度因人而异:另外Github收 ...

  10. 修改Linux中ssh协议中的默认端口号22

    说明:最近的一台服务器老是提示异常登录.主要原因是你的账户和密码可能太简单了,别人用默认的端口22进行登录. 打开SSH端口所在文件 vim /etc/ssh/sshd_config 进入编辑模式,将 ...