对于每个点开一棵权值线段树,以区间的左端点为值插入右端点的权值线段树中,并查集维护i左边第一个不被删空的位置,为F[i]

当一个点被删空的时候,这棵线段树中>F[i]的位置即为答案,清空以后把i和F[i]这两棵线段树合并

#include<cstdio>
using namespace std;
int cnt,Lastans,F[1000005],a[1000005],ls[2000005],rs[2000005],sz[2000005],root[100005];
int find(int x){if (!a[F[x]]) F[x]=find(F[x]);return F[x];
}
void update(int t){sz[t]=sz[ls[t]]+sz[rs[t]];
}
void del(int t,int l,int r,int x,int y){if (!t) return;if (r<x || l>y) return;if (l>=x && r<=y){Lastans+=sz[t];sz[t]=0;return;}int mid=(l+r)>>1;del(ls[t],l,mid,x,y);del(rs[t],mid+1,r,x,y);update(t);
}
void insert(int &t,int l,int r,int x){if (!t) t=++cnt;sz[t]++;if (l==r) return;int mid=(l+r)>>1;if (x<=mid) insert(ls[t],l,mid,x);else insert(rs[t],mid+1,r,x);
}
int merge(int x,int y){if (!x || !y) return x^y;sz[x]+=sz[y];ls[x]=merge(ls[x],ls[y]);rs[x]=merge(rs[x],rs[y]);return x;
}
int main(){int n,m;scanf("%d%d",&n,&m);for (int i=1; i<=n; i++) scanf("%d",&a[i]);for (int i=1; i<=n; i++) F[i]=i-1;for (int i=1; i<=m; i++){int l,r;scanf("%d%d",&l,&r);insert(root[r],1,n,l);}a[0]=1;int q;scanf("%d",&q);while (q--){int x;scanf("%d",&x);x=(x+Lastans-1)%n+1;a[x]--;if (!a[x]){int fx=find(x);del(root[x],1,n,fx+1,n);root[fx]=merge(root[fx],root[x]);}printf("%d\n",Lastans);}return 0;
}

  

转载于:https://www.cnblogs.com/silenty/p/9838515.html

BZOJ 4631: 踩气球相关推荐

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

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

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

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

  3. 【bzoj4631】踩气球

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

  4. bzoj4631踩气球

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

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

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

  6. noj 1142 F 踩气球

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

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

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

  8. 踩气球ZOJ1003

    描述: 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球的编号的乘积.现在需要你编一个程序来判断他们的胜负,判断的规则是这样的:如果两人都说 ...

  9. BZOJ4631: 踩气球

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

  10. 【NOJ1142】【算法实验二】踩气球

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

最新文章

  1. 网络和大数据成为重要文化生产力
  2. matlab数组操作
  3. DNS扫盲系列之五:域名配置ZONE文件
  4. wxWidgets:键码KeyCodes
  5. iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数
  6. 【windows】windows 11 安装解决 这台电脑无法运行 Windows 11
  7. EntityFrameworkCore DBFirst
  8. python迭代器学习与简单的实践
  9. c语言输出英文字母表,菜鸟求助,写一个随机输出26个英文字母的程序
  10. Anaconda spyder下载第三方包
  11. 探索FireMonkey的StyleBook皮肤控件的使用
  12. 计算机论文撰写周记,电子与计算机毕业设计周记
  13. 阿里电话面试被虐经历
  14. js的延迟执行 async defer/ js的数据类型全/ null和undefined区别/=、==、===的区别/js中的宏任务和微任务js的作用域附带试题有答案
  15. 163邮箱怎么申请注册?邮箱收费版怎么收费?163邮箱收费版优势?
  16. 预制体与非预制体_为什么更多的Web设计师应该尝试使用预制网站
  17. 计算机网络安全ipc默认共享,IPC$、ADMIN$、C$、D$都是什么?如何关闭取消删除Windows默认共享...
  18. 应用商店打开服务器错误,应用商店出错的修复方法
  19. 后端输出流文件时,浏览器不保存文件,不弹下载框
  20. type ‘_Map<String, dynamic>‘ is not a subtype of type ‘Map<String, Object>‘

热门文章

  1. laravel56框架报错如下:Class App\Http\Controllers\PublicMatch\PublicTakeController does not exist
  2. 【转载】这婚礼 太像样了
  3. tornado2.2编译出错:parse error before ‘/’
  4. 电子与计算机工程专业大学,2017年电子与计算机工程专业开设院校排名
  5. 问题解决 —— error: src refspec master does not match any error: failed to push some refs to ‘github.com
  6. ueditor上粘贴从word中copy的图片和文字
  7. Android简易指南针
  8. springboot毕设项目学生成绩管理系统49jpm(java+VUE+Mybatis+Maven+Mysql)
  9. 提供社交媒体共享链接的最简单(也是性能最高)的方法
  10. 襄阳文理学院计算机分数线,湖北文理学院理工学院2020年录取分数线(附2017-2020年分数线)...