题目大意

有一个序列,每次将一个位置的数减去1(保证这个数大于0)
有m个区间,每次操作后你都要输出有多少个区间和为0。
强制在线。

线段树搞搞

这m个区间可以被分割到线段树上的log个区间,那我们就把这些区间挂上去。
线段树维护区间和(每个位置可以只用0或1表示)
每次修改时如果一个区间和为0,就处理所有挂在上面的区间。
具体的,可以用d[i]表示第i个区间被分成了多少段,那么就是把挂在上面的区间d值均减一,d值为0显然就是区间和为0了。

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100000+10;
int sum[maxn*4],h[maxn*4],go[maxn*25],next[maxn*25];
int d[maxn],a[maxn];
int i,j,k,l,t,n,m,q,tot,ans;
void add(int x,int y){d[y]++;go[++tot]=y;next[tot]=h[x];h[x]=tot;
}
void build(int p,int l,int r){if (l==r){sum[p]=1;return;}int mid=(l+r)/2;build(p*2,l,mid);build(p*2+1,mid+1,r);sum[p]=sum[p*2]+sum[p*2+1];
}
void cover(int p,int l,int r,int a,int b){if (l==a&&r==b){add(p,i);return;}int mid=(l+r)/2;if (b<=mid) cover(p*2,l,mid,a,b);else if (a>mid) cover(p*2+1,mid+1,r,a,b);else{cover(p*2,l,mid,a,mid);cover(p*2+1,mid+1,r,mid+1,b);}
}
void change(int p,int l,int r,int a){sum[p]--;if (!sum[p]){int t=h[p];while (t){d[go[t]]--;if (!d[go[t]]) ans++;t=next[t];}}if (l==r) return;int mid=(l+r)/2;if (a<=mid) change(p*2,l,mid,a);else change(p*2+1,mid+1,r,a);
}
int main(){freopen("bal.in","r",stdin);scanf("%d%d",&n,&m);build(1,1,n);fo(i,1,n) scanf("%d",&a[i]);fo(i,1,m){scanf("%d%d",&j,&k);cover(1,1,n,j,k);}scanf("%d",&q);while (q--){scanf("%d",&j);j=(j+ans-1)%n+1;a[j]--;if (!a[j]) change(1,1,n,j);printf("%d\n",ans);}
}

[bzoj4631]踩气球相关推荐

  1. bzoj4631踩气球

    bzoj4631踩气球 题意: 有一个序列和一个区间集合,每次将序列中的一个数-1,求此时集合里有多少个区间和为0.序列大小≤100000,区间数≤100000,操作数≤100000. 题解: 此题解 ...

  2. BZOJ4631: 踩气球

    BZOJ4631: 踩气球 线段树 的 奇幻世界 题解: 在dalao fqk的模拟赛里我自己想出来的! 撒花 撒花 线段树维护气球,把一个孩子拆成若干个线段树上的区间,并放在对应线段树节点的vect ...

  3. BZOJ4631 踩气球

    每个熊孩子抽象成平面上的一个点,横坐标为左边界,纵坐标为右边界,点权为区间长度,把第x个盒子拿空相当于把以(1,x)为左下角,(x,n)为右上角的矩形内的点减一,答案就是有多少个点等于0,因为每个点最 ...

  4. 【BZOJ-4631】踩气球 线段树 + STL

    4631: 踩气球 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 224  Solved: 114 [Submit][Status][Discuss ...

  5. 【bzoj4631】踩气球

    4631: 踩气球 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 372   Solved: 186 [ Submit][ Status][ Di ...

  6. bzoj 4631: 踩气球(线段树)

    4631: 踩气球 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 375  Solved: 189 [Submit][Status][Discuss ...

  7. 记萌新赛的命题过程与踩气球过程

    从命题环节开始记起吧,踩气球部分放在后半段压轴. 大约$20$天以前,那天早上我刚下火车,得知今年比赛命题组组长是$xiang578$,老师发的命题人员名单中并没有我.出于对命题工作的好奇与热爱,我向 ...

  8. noj 1142 F 踩气球

    Problem F 踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自 ...

  9. 【算法实验二】--【回溯法】--踩气球

    1142.踩气球 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球 ...

最新文章

  1. 学习python的日常3
  2. apache修改最大连接并用ab网站压力测试
  3. 论文笔记:Hankel Matrix Factorization for Tagged Time Series to Recover Missing Values during Blackouts
  4. 20190101.DDD笔记
  5. 多源迁移学习相关研究回顾
  6. 经典排序算法(十)--希尔排序Shell Sort
  7. Quartus ll显示30天到期
  8. 禁止Edge浏览器自动更新的办法
  9. [个人tricks].chm格式电子书无法正常显示的两种解决办法(亲测有用)
  10. jenkins 配置代理
  11. 元宵佳节,戴铭老师亲自带你分析iOS行业动态!
  12. Julia Pro 1.0 下载安装教程
  13. 线性代数的视角理解LSR(least square regression)的参数评估算法本质
  14. 浅谈压缩感知(十三):压缩感知与传统压缩
  15. js调用本地摄像头拍照截图,提交后台
  16. 《Linux那些事儿之我是USB》我是U盘(7)狂欢是一群人的孤单
  17. Windows 和 Linux 系统查询 IP 地址命令
  18. 【统计学习方法】模型评估与模型选择
  19. 模板合集TOP50!覆盖8大行业领域,20+业务场景,打包好了直接送
  20. 城市交通指挥与应急疏导广播系统方案

热门文章

  1. linux所有用户都无法登录,记一次Linux用户无法登陆问题
  2. 118.杨辉三角 java求解
  3. 7-数据可视化-折线图可视化
  4. Ubuntu 忘记密码、重置密码的方法
  5. c语言数字用英文表达方式,英语口语:如何表达数字
  6. 梦想Android版CAD控件2021.12.06更新
  7. Android 6.0动态权限及小米(MIUI)权限的特殊处理
  8. 形态学中的开运算和闭运算
  9. c++ 三次多项式拟合_最小二乘法多项式曲线拟合数学原理及其C++实现
  10. 第1期:牛客竞赛语法入门班数组栈、队列和stl习题