【扫描线】Gym - 101190E - Expect to Wait
假设初始人数为0,
将每个时刻在等待的人数写下来,就是求个和。
如果纵坐标看成人数,横坐标看成时间,就是求个面积。
因为初始人数不一定为零,所以离线后扫描线即可回答所有询问。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,m,e;
struct LINE{
int y,l,id;
}ls[200010];
bool cmp(const LINE &a,const LINE &b){
return a.y!=b.y ? a.y>b.y : a.l<b.l;
}
ll anss[100010];
int main(){
freopen("expect.in","r",stdin);
freopen("expect.out","w",stdout);
int x,y;
char op[4];
scanf("%d%d",&n,&m);
int now=0,last=1;
for(int i=1;i<=n;++i){
scanf("%s%d%d",op,&x,&y);
if(now>0 && i>1){
ls[++e]=(LINE){now,x-last};
}
if(op[0]=='+'){
now-=y;
}
else{
now+=y;
}
last=x;
}
if(now>0){
ls[++e]=(LINE){now,1000000001};
}
for(int i=1;i<=m;++i){
++e;
scanf("%d",&ls[e].y);
ls[e].id=i;
ls[e].l=0;
}
sort(ls+1,ls+e+1,cmp);
ll nowans=0;
int nowl=0;
int i=1;
for(;i<=e;++i){
if(ls[i].l==0){
anss[ls[i].id]=nowans;
}
if(ls[i].y>0 && ls[i].l==1000000001){
break;
}
nowl+=(ll)ls[i].l;
if(ls[i].y!=ls[i+1].y){
nowans+=(ll)(ls[i].y-ls[i+1].y)*(ll)nowl;
}
}
for(;i<=e;++i)if(ls[i].l==0){
anss[ls[i].id]=-1;
}
for(i=1;i<=m;++i){
if(anss[i]==-1){
puts("INFINITY");
}
else{
printf("%I64d\n",anss[i]);
}
}
return 0;
}
【扫描线】Gym - 101190E - Expect to Wait的更多相关文章
- Gym - 101982F Rectangles (扫描线+线段树)
链接:http://codeforces.com/gym/101982/attachments 思路: 问被覆盖次数为奇数次的矩阵的面积并 扫描线求矩阵面积并我们是上界赋为-1,下界赋为1,因为要求覆 ...
- Gym - 100781G Goblin Garden Guards (扫描线)
题意: n 只哥布林,每只哥布林都有一个位置坐标. m 个炮台,每个炮台都有一个位置坐标和一个攻击半径. 如果一个哥布林在任何一个炮台的攻击范围内,都会被杀死. 求最后没有被杀死的哥布林的数量. 这题 ...
- Gym 100733J Summer Wars 题解:灵活运用扫描线的思想
题意: 给你n个点,m个横着的线段.你能够横移这些线段,可是这些线段的相对位置不能改变.假设一个点,在它的正上方和和正下方都有线段(包含线段的终点).则这个点被视为被"屏蔽".问通 ...
- Gym 102028J 扫描线/二维差分 + 解方程
题意:有一个二维平面,以及n个操作,每个操作会选择一个矩形,使得这个二维平面的一部分被覆盖.现在你可以取消其中的2个操作,问最少有多少块地方会被覆盖? 思路:官方题解简洁明了,就不细说了:https: ...
- Gym - 101982F 扫描线+线段树
题目链接:https://codeforces.com/gym/101982/attachments 要你求覆盖奇数次的矩形面积并,每次更新时减去原先的值即可实现奇数次有效,下推时为保证线段长度不变左 ...
- Codeforces Gym 101480C - Cow Confinement(扫描线+线段树)
题面传送门 题意: 有一个 \(10^6\times 10^6\) 的地图.其中 \(m\) 个位置上有花,\(f\) 个矩形外围用栅栏围了起来.保证 \(f\) 个矩形两两之间没有公共点. \(q\ ...
- 【扫描线】Gym - 100781G - Goblin Garden Guards
平面上有100000个哥布林和20000个圆,问你不在圆内的哥布林有多少个. 将每个圆从左到右切2r+1次,形成(2r+1)*2个端点,将上端点记作入点,下端点记作出点,再将这些点和那些哥布林一起排序 ...
- GYM 101350 F. Monkeying Around
F. Monkeying Around time limit per test 2.0 s memory limit per test 256 MB input standard input outp ...
- expect用法
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意: ...
随机推荐
- Winform MD5
1:MD5 http://www.cmd5.com/ 字节数组----字符串 //将字节数组中每个元素按照指定的编码格式解析成字符串//直接将数组ToString()//将字节数组中的每个元素ToSt ...
- ES6数组去重及ES5数组去重方法
ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; ...
- 通过or注入py脚本
代码思路 1.主要还是参考了别人的代码,确实自己写的和别人写的出路很大,主要归咎还是自己代码能力待提高吧. 2.将功能集合成一个函数,然后通过*args这个小技巧去调用.函数的参数不是argv的值,但 ...
- Python脚本 - 查询磁盘的读写次数信息
测试系统为:Centos 6.7 Python版本为: 3.6.4 脚本功能:查看指定磁盘的读写及时间等相关信息 #!/usr/bin/env python3 from collections imp ...
- GLIBCXX_3.4.9' not found - 解决办法
GLIBCXX_3.4.9' not found - 解决办法 http://blog.csdn.net/u012425536/article/details/26559653 https://koj ...
- Makefile系列之二 : 命令
一.显示命令 echo “@”字符可以控制命令是否在屏幕上显示,如 @echo 正在编译XXX模块...... 输出: 正在编译XXX模块...... 如果没有“@"则输出 : echo ...
- IE中部分版本的浏览器对Select标签设置innerHTML无效的问题
这样写的代码:document.getElementById('data_list').innerHTML = data;//data是ajax返回的数据 结果发现在ie10的兼容模式下面下拉框没有内 ...
- mycncart 前台代码跟踪
1.进入根目录的入口文件,index.php require_once(DIR_SYSTEM . 'startup.php');//最为重要的一步 start('catalog');//执行了这个方法 ...
- Python+Selenium 自动化实现实例-Xpath捕捉元素的几种方法
#coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("ht ...
- oracle11g如何创建数据库
oracle11g创建数据库的步骤如下:1.按住键盘上Windows键,打开开始菜单,找到Database Configuration Assitant并打开:2.打开数据库配置助手Database ...