Codeforces Gym 100523E E - Gophers SET
E - Gophers
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87794#problem/E
Description
Input
The first line of input contains four integers n, m, d and l (2 ¬ n; m ¬ 500 000, 1 ¬ d ¬ 500 000, 1 ¬ l ¬ 109 ) representing the number of gophers’ holes, the number of Dick’s CD players, the number of days and the range of a CD player, respectively. The second line of input contains n − 1 integers x2; x3; : : : ; xn (0 < x2 < x3 < : : : < xn ¬ 109 ) denoting the distances of the holes 2; 3; : : : ; n from the hole number 1. The third line contains m integers z1; z2; : : : ; zm (0 ¬ z1 < z2 < : : : < zm ¬ 109 ) denoting the distances of the consecutive CD players from the hole number 1. All the CD players are located to the east of this hole. Next, d lines follow. The i-th of these lines contains two integers pi and ri (0 ¬ pi ; ri ¬ 109 , pi 6= ri ) meaning that in the beginning of the i-th day Dick is going to move the CD player located pi meters from the hole number 1 to the point located ri meters to the east from that hole. You may assume that before every such operation there is a CD player at the position pi and there are no CD players at the position ri .
Output
Your program should output d + 1 lines. The line number i (for i = 1; 2; : : : ; d) should contain one integer representing the number of holes in which no gopher would be able to sleep well during the night before the i-th Dick’s operation. The last line should contain this number after the last Dick’s operation.
Sample Input
5 3 4 1 2 5 6 11 2 4 8 2 1 4 10 8 6 1 8
Sample Output
2 3 3 5 3
HINT
题意
给你n个点,m个长度为l的线段
有Q次询问,每次询问就是把x位置的线段挪到y位置,然后问你这些线段覆盖了多少个点
题解:
首先,我们知道每一个线段的长度都是一样的,而且题目给了,没有任何两条线段是在同一个点的,于是我们就可以用set做
对于每一个线段,他覆盖的区域实际上是[max(a[i-1]+l,a[i]-l),min(a[i+1]-l,a[i]+l)]这个区域
然后我们用set去维护就好了
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 1000001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
const int inf=0x7fffffff; //нчоч╢С
//const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
//**************************************************************************************
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
ll n,m,q,l;
ll aa[maxn];
ll ans=;
ll d[maxn];
ll C(ll l,ll r)
{
if(l>aa[n])
return ;
if(r<aa[])
return ;
if(l>r)
return ;
ll L,R;
if(l<=)
L=;
else
L=lower_bound(aa+,aa+n+,l)-aa;
if(r>=aa[n])
R=n;
else
R=(upper_bound(aa+,aa+n+,r)-aa)-;
return R-L+;
}
set<ll> S;
int main()
{
n=read(),m=read(),q=read(),l=read();
S.insert(-inf);
aa[]=;
for(int i=;i<=n;i++)
aa[i]=read();
S.insert(inf);
ll tmp=;
for(int i=;i<=m;i++)
{
ll x=read();
S.insert(x);
if(i==)
ans+=C(x-l,x+l);
else
ans+=C(max(tmp+l+1LL,x-l),x+l);
tmp=x;
}
printf("%lld\n",ans);
for(int i=;i<=q;i++)
{
ll x=read();
ll c=*++S.lower_bound(x);
ll d=*--S.lower_bound(x);
ans-=C(max(d+l+1LL,x-l),min(c-l-1LL,x+l));
int e=*S.lower_bound(x);
S.erase(e);
x=read();
c=*S.lower_bound(x);
d=*--S.lower_bound(x);
ans+=C(max(d+l+1LL,x-l),min(c-l-1LL,x+l));
printf("%lld\n",ans);
S.insert(x);
}
}
Codeforces Gym 100523E E - Gophers SET的更多相关文章
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
- 【Codeforces Gym 100725K】Key Insertion
Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...
- Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】
2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...
- codeforces gym 100553I
codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...
- CodeForces Gym 100213F Counterfeit Money
CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- codeforces Gym 100187J J. Deck Shuffling dfs
J. Deck Shuffling Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
随机推荐
- 【转】Android Studio系列教程一--下载与安装
原文网址:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/ 背景 相信大家对Android Studio已经不陌生 ...
- Github 终于开始认真考虑开源项目许可证了
如今GitHub已成为全球最流行的开源项目托管平台,但也有质疑声音——“Github中的大多数项目并不算是开源项目”.这是因为Github中大多数项目并没有明确声明所使用的许可证. 根据版权法规定,如 ...
- [转] C#操作EXCEL,生成图表的全面应用
gailzhao 原文 关于C#操作EXCEL,生成图表的全面应用 近来我在开发一个运用C#生成EXCEL文档的程序,其中要根据数据生成相应的图表,该图表对颜色和格式都有严格的要求,在百度和谷歌中搜索 ...
- C/C++面试小知识点
1.static有什么用途. 解答: 在函数体中,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其 ...
- 转载:看c++ primer 学习心得
学习C++ Primer时遇到的问题及解释 chenm91 感觉: l 啰嗦有时会掩盖主题:这本书确实有些啰嗦,比如在讲函数重载的时候,讲了太长一大段(有两节是打了*号的,看还是不看 ...
- android电池信息简介
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Fitnesse启动参数与配置
Fitnesse最新版20140630默认启动后,网页风格与 fitnesse.org 的Bootstrap风格完全不一致. 需要配置plugins.properties中的Theme=bootstr ...
- js刷新页面方法
1,reload 方法,该方法强迫浏览器刷新当前页面.语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取 ...
- bzoj1150
haha,贪心,边界条件折腾了我一会儿 #include<cstdio> #include<cctype> #include<queue> #include< ...
- Android Application Project 工程目录下各个文件的意思
(1) src:源文件,主要是完成java代码的编写 (2) gen:ADT即系统自动生成的JAVA文件(即源代码目录),程序员千万不要去修改 (3) gen->[Package Name]-& ...