奇怪的自助餐厅--扫描线

问题描述

有一家奇怪的预约式自助餐厅,这家餐厅按时间计费,每一单位时间都会收取价格,不同桌位有不同价格,每个桌位从1编号到n,并且当单位时间内餐厅人数大于一定值时每个桌位这个单位时间的价格都会翻倍。

来这个餐厅吃饭的也是一些奇怪的人,他们都会提前预约一个时段,一般情况下会在时段结束后才离开,有时在一个时间单位开头会发生突发事件,编号在lr区间内的桌位的客人突然有急事离开,为了照顾这些客人,餐厅不收取他们之后的预约时间单位的钱。预约时段在突发事件开始的客人与突发事件无关。

现在给出m个预约,c个突发事件,你需要计算餐厅的收入是多少。

输入

第一行3个整数n, m, k,分别代表餐厅的桌位数,预约个数以及餐厅在人数大于k时价格翻倍,之后一行输出n个整数,第i个整数xi代表第i个桌位每个单位时间的价格,之后输出m行,每一行三个整数l, r, x,代表一个预约从l时间到r时间(闭区间),坐在x桌位,保证没有两个人同一时间预约同一个桌位。

之后一个整数c,代表突发事件个数,之后c行,每行三个整数y, cl, cr代表事件发生在y时间开头,受影响桌位区间是cl, cr,因为这个事件离开的人不需要支付y时间及以后的费用。

1<=n, m, k, c<=100000,

1<=xi<=100000,

1<=l<=r<=100000,

1<=x<=n,

1<=y<=100000,

1<=cl<=cr<=n.

输出

输出一个整数表示餐厅收入。

样例输入

3 3 1

5 8 12

3 8 1

2 5 2

4 7 3

1

4 2 3

样例输出

175

思路,使用扫描线的思路。

对应的,把预约的开始、预约的结束、突发事件,都作为一类事件,对这三类事件进行不同的方式处理

以事件先后为优先级,如果事件相等,就以 1.突发事件 2.预约的结束3.预约的开始、为顺序进行优先级排序

然后再以扫描线的思路进行计算

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<set>
using namespace std;
const int MAXN = 1111;
typedef long long ll;struct node{//事件,座位号,类型 int time,pos,type;node(){};node(int time,int pos,int type):time(time),pos(pos),type(type){};bool operator<(const node &b){if(this->time==b.time) return this->type<b.type;return this->time<b.time;}
};int ql[MAXN],qr[MAXN];
node nodes[MAXN*4];
int ssiue[MAXN];
int N,M,K,C;
int co[MAXN];
int main(){set<int> se;se.clear();scanf("%d%d%d",&N,&M,&K);for(int i=1;i<=N;i++){scanf("%d",&co[i]);}int kk = 0;for(int i=1;i<=M;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);//事件1 人预约nodes[++kk] = node(a,c,1);//事件2 预约结尾时间 nodes[++kk] = node(b+1,c,0);}scanf("%d",&C);for(int i=1;i<=C;i++){int a;//事件3 突发事件 scanf("%d%d%d",&a,&ql[i],&qr[i]);nodes[++kk] = node(a,i,-1);}sort(nodes+1,nodes+kk+1);int sum = 0;int now = 0;ll ans = 0;int now_num =0;for(int i=1;i<=kk;i++){if(now_num>K) ans += sum*(nodes[i].time - now)*2;else ans+=sum*(nodes[i].time - now);now = nodes[i].time;//事件3 突发事件 if(nodes[i].type == -1){int id = nodes[i].pos;set<int>::iterator it= se.lower_bound(ql[id]);while(it!=se.end() && *it<=qr[id]){
//              printf("%d",*it);ssiue[(*it)] = 0;sum -= co[(*it)];now_num --;se.erase(it++);}//这样使用错误
//          for(;it!=se.end() && *it<=qr[id];it++){
//              printf("%d",*it);
//              ssiue[(*it)] = 0;
//              sum -= co[(*it)];
//              now_num --;
//              se.erase(it);
//          }}//事件1 人预约 else if(nodes[i].type == 1){ssiue[nodes[i].pos] = 1;sum+=co[nodes[i].pos];se.insert(nodes[i].pos);now_num++;//事件2 预约结尾时间 }else if(ssiue[nodes[i].pos]){ssiue[nodes[i].pos] = 0;sum-=co[nodes[i].pos];se.erase(nodes[i].pos);now_num--;}}printf("%lld\n",ans);return 0;
}

奇怪的自助餐厅--扫描线相关推荐

  1. 芜湖机器人餐厅地址_自助餐哪家强?得看谁让你扶墙... 芜湖8家自助餐厅超强攻略来了...

    对于一个吃货星人而言 还有什么比 自助餐 更让人心动呢? 奢侈到极点的海鲜自助 性价比超高的烧烤自助 ...... 撑到扶墙出! 今天 咱们就来看看芜湖那些 令人眼馋嘴更馋的神仙自助餐吧! 日式自助篇 ...

  2. 朱 蚌埠机器人餐厅_据说,这是蚌埠人气爆棚10家自助餐厅!你吃过几家?!

    每次问别人想吃啥子? 听到"随便"两个字的时候, 小编第一时间想到的是:自助餐思密达!! 自助神马的最有爱了, 特别是一群女生们坐到一起摆一桌边边吃边聊, 无比嗨有木有!!! 不废 ...

  3. JSP+Servlet+Javabean自助餐厅饭店收银管理系统带推荐

    开发工具:Eclipse/Idea  数据库:mysql 开发技术: JSP + Servlet + JavaBean 一个自助餐厅饭店管理系统,实现了餐厅的无纸化自动管理,员工或者管理员登录系统后可 ...

  4. 你永远别想吃垮一家自助餐厅

    每当你想要去一家自助餐厅前,总会有一个声音在脑海中盘旋起来--一定要吃回本. 更有追求的人,则可能直接放下豪言,要吃垮自助餐厅. 为了在自助餐厅吃回本甚至"薅羊毛",网上出现了各种 ...

  5. 大连市区内所有的自助餐厅

    1.店名:万达国际.地址:万达国际饭店(一层.三层).特色:海鲜火锅自助或铁板牛扒自助48元/位.(含酒水) 2.店名:中山大酒店"印度城".地址:中山大酒店38楼咖啡旋转餐厅.特 ...

  6. 上海平价自助餐厅大全(转)

    好伦哥 批萨自助,也有许多小甜点和炸鸡或者什么,还有烤翅还不错. 价格39元/位 四川北路,淮海路 顶呱呱 自助式的快餐店,"不吃自助的话","也有蛮多选择". ...

  7. 诸暨机器人餐厅价格_一起吃垮诸暨这家牛排自助餐厅!50+款自助,人均低至45元!...

    原标题:一起吃垮诸暨这家牛排自助餐厅!50+款自助,人均低至45元! 平常小编不敢轻易的去西餐厅吃饭 毕竟小小一块肉根本 填满不了我128G的胃 但是印象城的这家牛排餐厅 却颠覆了我对西餐厅的所有刻板 ...

  8. 7-7 自助餐厅2 (18分)C语言

    7-7 自助餐厅2 (18分) 某自助餐厅提供5种套餐,价格分别如下: A餐 50元 B餐 60元 C餐 75元 D餐 100元 E餐 200元 同时根据顾客年龄有折扣: 18岁以下(不含):打8折 ...

  9. 基于Java+HTML5+Node.js的自助餐厅管理系统(客户版+商家版)

    文档+任务书+选题表+开题报告+文献综述+外文翻译及原文+项目源码及数据库文件 摘要 随着智能移动设备的普及,移动互联网在生活中的重要性越来越明显,为了适应快速发展的Web技术以及不断提出的移动Web ...

最新文章

  1. docker omv 防火墙_OpenMediaVault(OMV)配置Docker
  2. Swoole 自定义项目初始化事件处理的实现
  3. 信息系统项目管理师-项目合同管理考点笔记
  4. 智慧显示:5G时代的新机遇
  5. 网易2019实习生招聘题目 被3整除
  6. ansible-playbook相关
  7. Taro+react开发(32) Please use the ‘new‘ operator, this DOM object constructor cannot be called as a fu
  8. 容器的基础 XmlBeanFactory(下篇)
  9. java mockserver搭建_mockjs,json-server一起搭建前端通用的数据模拟框架教程
  10. 利用jquery实现数字千分位排版显示,使用0动态补全8位数
  11. 精选 | 2018年1月R新包推荐
  12. 微信浏览器跳转app解决方案
  13. Kubernetes in Action 免积分下载
  14. D3.js中文版api-接口文档
  15. 学大数据要学哪些算法_大数据专业是学什么?
  16. 华为云从入门到实战 | 云容器服务
  17. linux内存测试工具memtest,内存检测工具Memtest使用方法(图文教程)
  18. Selenium QQ自动化登录
  19. 日益趋增的Linux勒索软件
  20. SGU 187 Twist and whirl - want to cheat

热门文章

  1. 基于微信小程序宠物交易小程序——计算机毕业设计
  2. Google谷歌gmail邮箱账号注册遇到:此电话号码无法用于进行验证怎么办?
  3. Strongly-connected components
  4. Ideal打开直接闪退
  5. React中无限级嵌套路由的实现(RRD-V6)
  6. git中怎样忽略.idea/文件和目录
  7. 原码、反码、补码(8位二进制数)
  8. Linux中的链接文件
  9. 基于51单片机的两相步进电机控制系统proteus仿真
  10. 05-MySQL的完整性约束