bzoj4631

4631: 踩气球

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 260  Solved: 133
[Submit][Status][Discuss]

Description

六一儿童节到了, SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏:有N个盒子从左到右排成一排,第i个盒子里装着Ai个气球。
SHUXK 要进行Q次操作,每次从某一个盒子里拿出一个没被踩爆的气球,然后熊孩子们就会立刻把它踩爆。
这M个熊孩子每个人都指定了一个盒子区间[Li, Ri]。 如果某一个时刻,一个熊孩子发现自己选定的盒子区间[Li, Ri]中的所
有气球都已经被踩爆了,他就会非常高兴(显然之后他一直会很高兴)。
为了不辜负将自己的任务强行塞给 SHUXK 的那个人的期望, SHUXK 想向你询问: 
他每次操作过后会有多少个熊孩子很高兴。

 

Input

第一行包含两个正整数N和M,分别表示盒子和熊孩子的个数。
第二行包含N个正整数Ai( 1 < = Ai < = 10^5),表示每个盒子里气球的数量。
以下M行每行包含两个正整数Li, Ri( 1 < = Li < = Ri < = N),分别表示每一个熊孩子指定的区间。
以下一行包含一个正整数Q,表示 SHUXK 操作的次数。
以下Q行每行包含一个正整数X,表示这次操作是从第X个盒子里拿气球。为
了体现在线,我们对输入的X进行了加密。
假设输入的正整数是x',那么真正的X = (x' + Lastans − 1)Mod N + 1。其
中Lastans为上一次询问的答案。对于第一个询问, Lastans = 0。
输入数据保证1 < = x' < = 10^9, 且第X个盒子中有尚未被踩爆的气球。
N < = 10^5 ,M < = 10^5 �,Q < = 10^5

 

Output

包含Q行,每行输出一个整数,表示 SHUXK 一次操作后询问的
答案。答案的顺序应与输入数据的顺序保持一致。

 

Sample Input

5 3
1 1 1 1 1
5 5
2 2
1 3
5
4
2
5
2
3

Sample Output

0
1
1
2
3
【样例说明】
实际上每次操作的盒子是: 4 2 1 3 5
在第二次操作后,第二个熊孩子会高兴 (区间[2,2]中的气球已经全部被踩爆)。
在第四次操作后,第三个熊孩子会高兴(区间[1,3]中的气球已经全部被踩爆)。
在第五次操作后,第一个熊孩子会高兴(区间[5,5]中的气球已经全部被踩爆)。

HINT

Source

按r排序,每次询问二分查找r的位置,线段树上查找最大值就可以了(我仍然想不出来)

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
#define N 200010
struct query
{int l,r;
}q[N];
int n,m,Q,cnt,ans,lastans;
int pre[N],nxt[N],a[N];
PII tree[N<<1];
bool cp(query x,query y)
{if(x.r!=y.r) return x.r<y.r;return x.l>y.l;
}
void update(int l,int r,int x,int pos,int num)
{if(l==r){tree[x].first=num;tree[x].second=l;return;}int mid=(l+r)>>1;if(pos<=mid) update(l,mid,x<<1,pos,num);else update(mid+1,r,x<<1|1,pos,num);if(tree[x<<1].first>tree[x<<1|1].first) tree[x]=tree[x<<1];else tree[x]=tree[x<<1|1];
}
PII query(int l,int r,int x,int a,int b)
{if(l>b||r<a) return make_pair(0,0);if(l>=a&&r<=b) return tree[x];int mid=(l+r)>>1;PII t1=query(l,mid,x<<1,a,b),t2=query(mid+1,r,x<<1|1,a,b);if(t1.first>t2.first) return t1; else return t2;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;++i){scanf("%d",&a[i]);pre[i]=i-1; nxt[i]=i+1;}for(int i=1;i<=m;++i) scanf("%d%d",&q[i].l,&q[i].r);sort(q+1,q+m+1,cp);for(int i=1;i<=m;++i) update(1,m,1,i,q[i].l);scanf("%d",&Q);while(Q--){int x; scanf("%d",&x);x=(x+lastans-1)%n+1;a[x]--;if(a[x]){printf("%d\n",ans);continue;}int pos1=n,pos2=n,left=pre[x]+1,right=nxt[x]-1;int l=0,r=n+1;while(r-l>1){int mid=(l+r)>>1;if(q[mid].r>=left) r=pos1=mid; else l=mid; }l=0; r=n+1;while(r-l>1){int mid=(l+r)>>1;if(q[mid].r<=right) l=pos2=mid; else r=mid;}
/*      if(q[pos1].r>right) pos1--;if(q[pos2].r>right) pos2--;if(pre[x]==0) pos1=1; */
//      printf("x=%d\n",x);
//      printf("left=%d right=%d\n",left,right);
//      printf("pos1=%d pos2=%d\n",pos1,pos2);while(1){PII t=query(1,m,1,pos1,pos2);
//          printf("query=%d\n",t.first);if(t.first>=left&&t.first<=right&&t.first!=0) {ans++;update(1,m,1,t.second,0);} else break;}nxt[pre[x]]=nxt[x];pre[nxt[x]]=pre[x];lastans=ans;printf("%d\n",ans); }return 0;
}
View Code

 

转载于:https://www.cnblogs.com/19992147orz/p/6481766.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hpcp5225设置linux网络,惠普HP color laserjet CP5225打印机驱动

软件标签&#xff1a;惠普CP5225驱动是为同名打印机推出的驱动程序&#xff0c;维持着打印机的正常工作&#xff0c;小编提供了驱动下载&#xff0c;若是你的惠普CP5225打印机在使用过程中出现不能打印或者无法被电脑识别等问题&#xff0c;快来本站下载该驱动来解决问题吧!安装…

Dubbo底层采用Socket进行通信详解

由于Dubbo底层采用Socket进行通信&#xff0c;自己对通信理理论也不是很清楚&#xff0c;所以顺便把通信的知识也学习一下。 n 通信理论 计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。 1.一组信息&#xff08;通常是字节&#xff09;的各位数据被…

linux 网络协议栈变化,ZZ Linux网络协议栈学习

最近学习linux内核网络协议栈&#xff0c;把数据包接收流程大致理了一下&#xff0c;前面也看了瀚海书香兄的总结&#xff0c;感觉总结的比我精炼&#xff0c;抓住了主干&#xff0c;是一目了然的那种我的这篇本来是自己看得&#xff0c;因此把我自己学习中一些遇到的问题写了出…

delete删除

delete只能删除属性&#xff0c;不能删除变量和原型链上的属性 1,对象属性删除 var obj {name: mary } delete obj.name; console.log(obj.name); // undefined 2、删除数组中的元素&#xff0c;删除值&#xff0c;不能删除索引 var arr [1, 2, 3]; console.log(arr[0], arr…

linux安装各种文件格式,Embeded linux中的各类文件系统

Cramfs&#xff1a;(优点&#xff1a;只读&#xff0c;目的&#xff1a;不可更改文件、防入侵)1.下载cramfs-1.1源码工具http://files.cnblogs.com/files/pokerface/cramfs-1.1.tar.gz2.解压tar xvzf cramfs-1.1.tar.gz -C /home/liuzhengwu/tools3.编译make4.得到COPYING cra…

拯救者linux无法正常关机,Ubuntu无法关机解决办法

说明&#xff1a;如果不成功请参考一下文章最后的内容&#xff0c;也许会有帮助。其实不止在ubuntu里面&#xff0c;fedora里面我也遇到了这个问题&#xff0c;就是电脑可以重启&#xff0c;但是不能直接关机&#xff0c;否则就一直停在关机界面&#xff0c;需手动关机。郁闷很…

ES6 正则的扩展

1. RegExp构造函数 ES5中&#xff0c;RegExp构造函数的参数&#xff1a; 参数是字符串&#xff0c;这时第二个参数表示正则表达式的修饰符&#xff08;flag&#xff09;参数是一个正则表示式&#xff0c;这时会返回一个原有正则表达式的拷贝。但是&#xff0c;ES5不允许此时使用…

华为荣耀笔记本linux系统怎么样,荣耀笔记本和华为笔记本有什么区别

以荣耀Magic Book Pro和华为matebook 14为例&#xff0c;其区别如下&#xff1a;1、屏幕&#xff1a;荣耀Magic Book Pro屏幕尺寸为16.1英寸&#xff0c;显示比例为16比9&#xff0c;分辨率为1920乘以1080&#xff0c;华为matebook 14屏幕尺寸为14英寸&#xff0c;显示比例3比2…

初始Angularjs2

一、为什么使用Angularjs2 Angularjs2全面使用了模块化、组件化的思想&#xff0c;它有如下的特性&#xff1a; 1&#xff09;模块化 在ng2的应用中&#xff0c;所有的系统功能都是模块化的&#xff0c;开发者只需要按需导入模块化的好处在于可以当应用加载时&#xff0c;是按需…

linux中输入ls出现蓝色的点,linux上ls的蓝色太深,怎么处理

linux下ls的蓝色太深&#xff0c;怎么办&#xff1f;在linux下使用ls命令时&#xff0c;会将目录以蓝色显示。在某些显示器上&#xff0c;黑底蓝字&#xff0c;看起来相当费力&#xff0c;以至于我有时候不得不使用dir命令&#xff0c;全部显示成白色。先看一个图&#xff1a;看…

四色着色问题 c语言编程,数据结构-图着色问题

7-38 图着色问题 (25 分)图着色问题是一个著名的NP完全问题。给定无向图G(V,E)&#xff0c;问可否用K种颜色为V中的每一个顶点分配一种颜色&#xff0c;使得不会有两个相邻顶点具有同一种颜色&#xff1f;但本题并不是要你解决这个着色问题&#xff0c;而是对给定的一种颜色分配…

HTML学习笔记4之第五章第六章

2017-03-02 完成第五章第六章的学习 第五章&#xff1a;为界面增加图像 浏览器处理图像的过程&#xff1a;先请求页面&#xff0c;若需要图片&#xff0c;在请求图片 图像的格式&#xff1a;JPEG&#xff0c;PNG&#xff0c;GIF&#xff0c;各自的特点和优势 内联元素<img&g…

c语言printf %llo,c++ - Printf疯狂了 - 堆栈内存溢出

你不能使用%d来打印long long 。 你必须使用%lld 。 (因此请使用"\\n%d %d | %lld %lld | %d %d"作为格式字符串。)特别是&#xff0c;显而易见的是&#xff0c;在“52 0 | 52 0”中&#xff0c;第一个52 0是a.rez &#xff0c;第二个52 0是b.rez (这些中的每一个都是…

js柯里化

function sum(x){console.log(x:x);var y function(x){ console.log(xx:x);console.log(y:y);return sum(xy) }y.toString y.valueOf function(){ return x; } console.log(yy:y);return y; } sum(1)(2)(3)(4);//10 转载于:https://www.cnblogs.com/yuri2016/p/6496486.ht…

用c语言随机获区100个整数,用rand() 函数去100 个随机的整数的有关问题

用rand() 函数去100 个随机的整数的问题int rand100 (((double) rand() / (double) RAND_MAX) * RANGE_MAX RANGE_MIN);你让 RANGE_MAX1&#xff1b;RANGE_MIN 0问题&#xff1a;1 rand() 返回的是 什么类型的数&#xff1f;2 (double) rand() / (double) RAND_MAX)&#x…

BZOJ 3697: 采药人的路径 [点分治] [我想上化学课]

传送门 题意&#xff1a; 路径有$-1,1$两种权值&#xff0c;求有多少路径满足权值和为$0$且有一个点将路径分成权值和为$0$的两段 第四节课本来想去上化学&#xff0c;然后快上课了这道题还没调出来.....可恶我想上化学 昨天两节语文课潸然的李煜讲座也没去听呜呜听说今天的语文…

c#语言规范所在文件夹,C#规范整理·语言要素

如有不理解&#xff0c;请留言&#xff0c;开始!1. 正确操作字符串拼接字符串一定要考虑使用 StringBuilder ,默认长度为16,实际看情况设置。StringBuilder本质&#xff1a; 是以非托管方式分配内存。同时StringFormat方法 内部也是使用StringBuilder进行字符串格式化。2. 使用…

Discuz常见小问题-如何取消登陆发帖验证码

1 正常情况下&#xff0c;用户点击登录之后&#xff0c;需要填写验证码 2 进入后台&#xff0c;点击防灌水&#xff0c;验证设置&#xff0c;然后下面的各个选项可以设置是否启用验证码。 转载于:https://www.cnblogs.com/acetaohai123/p/6504754.html

RC电路的充放过程C语言实现,RC串联电路的暂态过程基本原理介绍

RC串联电路的特点&#xff1a;由于有电容存在不能流过直流电流&#xff0c;电阻和电容都对电流存在阻碍作用&#xff0c;其总阻抗由电阻和容抗确定&#xff0c;总阻抗随频率变化而变化。RC 串联有一个转折频率&#xff1a;f01/2πR1C1当输入信号频率大于f0 时&#xff0c;整个 …

jvm 方法区

方法区在一个jvm实例的内部&#xff0c;类型信息被存储在一个称为方法区的内存逻辑区中。类型信息是由类加载器在类加载时从类文件中提取出来的。类(静态)变量也存储在方法区中。 jvm实现的设计者决定了类型信息的内部表现形式。如&#xff0c;多字节变量在类文件是以big-endia…