约会安排 HDU - 4553

约会安排 HDU - 4553

题意:

在这里插入图片描述
题意又丑又长就不叙述了

题解:

这个题一开始理解错了。。。题目相当于是有三种情况占据时间,分别是学习,女神和屌丝,我们用不同的lazy来表示女神和屌丝,根据优先级去更新状态。
学习pushdown时会讲女神和屌丝的lazy清空,女神会把屌丝的清空。相同类型所占区间要进行合并。但是要注意:学习时间可以被后面任意
在为屌丝安排时顺序安排时间
为女神安排时,先看屌丝是否有空余时间,如果没有直接无视屌丝(因为可以占用屌丝时间),直接判断女神时间是否有连续x长的空余时间
ls,rs,ms分别表示左/右和整个区间最长连续空时间的长度
这个题是不错的多lazy,区间合并的好题目

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;const int L= 100000 + 10;struct node
{int lazydiaosi, lazynvshen, lazystudy;int ls, rs, ms; //屌丝标记int nsl, nsr, nsm; //女神标记
} a[L << 2];void diaosi(int l, int r, int i)
{a[i].lazydiaosi= 1;a[i].ls= a[i].rs= a[i].ms= 0;
}void nvshen(int l, int r, int i)
{a[i].lazynvshen= 1;a[i].lazydiaosi= 0;a[i].ls= a[i].rs= a[i].ms= 0;a[i].nsl= a[i].nsr= a[i].nsm= 0;
}void xuexi(int l, int r, int i)
{a[i].lazystudy= 1;a[i].lazydiaosi= a[i].lazynvshen= 0;//屌丝女神标记清空a[i].ls= a[i].rs= a[i].ms= r - l + 1;a[i].nsl= a[i].nsr= a[i].nsm= r - l + 1;
}void pushup(int l, int r, int i)//区间合并
{int mid= (l + r) >> 1;a[i].ms= max(a[2 * i].ms, a[2 * i + 1].ms);a[i].ms= max(a[i].ms, a[2 * i].rs + a[2 * i + 1].ls);a[i].ls= a[2 * i].ls;a[i].rs= a[2 * i + 1].rs;if (a[2 * i].ls == mid - l + 1)a[i].ls+= a[2 * i + 1].ls;if (a[2 * i + 1].rs == r - mid)a[i].rs+= a[2 * i].rs;a[i].nsm= max(a[2 * i].nsm, a[2 * i + 1].nsm);a[i].nsm= max(a[i].nsm, a[2 * i].nsr + a[2 * i + 1].nsl);a[i].nsl= a[2 * i].nsl;a[i].nsr= a[2 * i + 1].nsr;if (a[2 * i].nsl == mid - l + 1)a[i].nsl+= a[2 * i + 1].nsl;if (a[2 * i + 1].nsr == r - mid)a[i].nsr+= a[2 * i].nsr;
}void pushdown(int l, int r, int i)
{int mid= (l + r) >> 1;//按照优先级依次下降lazyif (a[i].lazystudy) {xuexi(l, mid, 2 * i);xuexi(mid + 1, r, 2 * i + 1);a[i].lazystudy= 0;}if (a[i].lazydiaosi) {diaosi(l, mid, 2 * i);diaosi(mid + 1, r, 2 * i + 1);a[i].lazydiaosi= 0;}if (a[i].lazynvshen) {nvshen(l, mid, 2 * i);nvshen(mid + 1, r, 2 * i + 1);a[i].lazynvshen= 0;}
}void study(int L, int R, int l, int r, int i)
{if (L == l && R == r) {xuexi(l, r, i);return;}int mid= (l + r) >> 1;pushdown(l, r, i);if (R <= mid)study(L, R, l, mid, 2 * i);else if (L > mid)study(L, R, mid + 1, r, 2 * i + 1);else {study(L, mid, l, mid, 2 * i);study(mid + 1, R, mid + 1, r, 2 * i + 1);}pushup(l, r, i);
}void insert(int flag, int L, int R, int l, int r, int i)
{if (l == L && r == R) {if (!flag)diaosi(l, r, i);elsenvshen(l, r, i);return;}int mid= (l + r) >> 1;pushdown(l, r, i);if (R <= mid)insert(flag, L, R, l, mid, 2 * i);else if (L > mid)insert(flag, L, R, mid + 1, r, 2 * i + 1);else {insert(flag, L, mid, l, mid, 2 * i);insert(flag, mid + 1, R, mid + 1, r, 2 * i + 1);}pushup(l, r, i);
}int query(int flag, int t, int l, int r, int i)
{if (l == r)return l;int mid= (l + r) >> 1;pushdown(l, r, i);if (!flag) {//屌丝if (a[2 * i].ms >= t)//左子树有时间return query(flag, t, l, mid, 2 * i);else if (a[2 * i].rs + a[2 * i + 1].ls >= t)//右子树+右子树有时间return mid - a[2 * i].rs + 1;else//右子树有时间return query(flag, t, mid + 1, r, 2 * i + 1);}else {if (a[2 * i].nsm >= t)return query(flag, t, l, mid, 2 * i);else if (a[2 * i].nsr + a[2 * i + 1].nsl >= t)return mid - a[2 * i].nsr + 1;elsereturn query(flag, t, mid + 1, r, 2 * i + 1);}
}int main()
{int t, i, x, y, ans, cas= 1, n, m;char str[20];scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);printf("Case %d:\n", cas++);study(1, n, 1, n, 1);while (m--) {scanf("%s", str);if (str[0] == 'D') {scanf("%d", &x);if (a[1].ms < x) //线段树最大的区间都小于给定的时间就不用找了printf("fly with yourself\n");else {ans= query(0, x, 1, n, 1);insert(0, ans, ans + x - 1, 1, n, 1);printf("%d,let's fly\n", ans);}}else if (str[0] == 'N') {scanf("%d", &x);if (a[1].ms < x) {if (a[1].nsm < x)printf("wait for me\n");else {ans= query(1, x, 1, n, 1);insert(1, ans, ans + x - 1, 1, n, 1);printf("%d,don't put my gezi\n", ans);}}else {ans= query(0, x, 1, n, 1);insert(1, ans, ans + x - 1, 1, n, 1);printf("%d,don't put my gezi\n", ans);}}else {scanf("%d%d", &x, &y);study(x, y, 1, n, 1);printf("I am the hope of chinese chengxuyuan!!\n");}}}return 0;
}

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

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

相关文章

ML.NET机器学习、API容器化与Azure DevOps实践(一):简介

打算使用几篇文章介绍一下.NET下的机器学习框架ML.NET的具体应用&#xff0c;包括一些常用的业务场景、算法的选择、模型的训练以及RESTful API的创建、机器学习服务容器化&#xff0c;以及基于Azure DevOps的容器化部署等等相关的内容。如果你从来没有玩过机器学习&#xff0c…

Picture POJ - 1177(矩形周长并))

Picture POJ - 1177 题目&#xff1a; 多个矩阵相交在一起&#xff0c;问新图形的周长是多少 题解&#xff1a; 参考题解 周长分为两部分&#xff1a;横线和竖线 横线计算方法&#xff1a;现在总区间被覆盖的长度和上一次总区间被覆盖的长度之差的绝对值 那么我们只需要从…

聊一聊C# 8.0中的await foreach

很开心今天能与大家一起聊聊C# 8.0中的新特性-Async Streams,一般人通常看到这个词表情是这样.简单说,其实就是C# 8.0中支持await foreach.或者说,C# 8.0中支持异步返回枚举类型async Task<IEnumerable<T>>.好吧,还不懂?Good,这篇文章就是为你写的,看完这篇文章,你…

ASP.NET Core 实现带认证功能的Web代理服务器

引言最近在公司开发了一个项目&#xff0c;项目部署架构图如下&#xff1a;思路如图中文本所述&#xff0c;公司大数据集群不允许直接访问外网&#xff0c;需要一个网关服务器代理请求&#xff0c;本处服务器A就是边缘代理服务器的作用。通常技术人员最快捷的思路是在服务器A上…

Unfair contest(个人做法)

Unfair contest 题意&#xff1a; 两个人参赛&#xff0c;n个评委打分&#xff0c;去掉s个最高分&#xff0c;去掉t个最低分&#xff0c;剩下分求平均分&#xff0c;平均分大的获胜。你是第n个评委&#xff0c;此时已知前n-1个评委所打分数&#xff0c;现在轮到你打分&#x…

ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程内(InProcess)托管ASP.NET Core 进程内(InProcess)托管我们先简单回顾下 ASP.NET Core 中,要配置InProcess的服务器&#xff0c;需要在项目文件中添加< AspNetCoreHostingModel >元素&#…

eShopOnContainers 知多少[10]:部署到 K8S | AKS

1. 引言断断续续&#xff0c;感觉这个系列又要半途而废了。趁着假期&#xff0c;赶紧再更一篇&#xff0c;介绍下如何将eShopOnContainers部署到K8S上&#xff0c;进而实现大家常说的微服务上云。2. 先了解下 Helm读过我上篇文章ASP.NET Core 借助 K8S 玩转容器编排的同学&…

DI是实现面向切面和面向抽象的前提

DI越来越重要DI就是依赖注入&#xff0c;现在来说&#xff0c;大部分框架都是以DI为基础组件的&#xff0c;每一个框架都有自己的DI组件&#xff0c;像dotnet core&#xff0c;java spring等&#xff0c;也都为自己的框架量身打造了DI工具。面向对象的几个原则依赖倒置原则&…

.net core 并发下的线程安全问题

抱歉&#xff0c;其实内容并不如题&#xff01;&#xff01;&#xff01;背景&#xff08;写测试demo所出现的异常&#xff0c;供大家学习与拍砖&#xff09;&#xff1a;.net core webapi项目&#xff0c;做了一个授权的filter&#xff08;真正的生产项目的话&#xff0c;JWT很…

cf1555B. Two Tables

cf1555B. Two Tables 题意&#xff1a; 一个大矩阵空间内放置一个矩阵a&#xff0c;现在要再往这个空间内放一个矩阵b&#xff0c;a移动距离len才能放下b&#xff0c;问len最小是多少 题解&#xff1a; 不难发现左右或上下移动是最佳的&#xff0c;斜着移动是最不好的。此时…

cf1555C Coin Rows

cf1555C Coin Rows 题意&#xff1a; 有一个两行m列的地图&#xff0c;每个格子都有对应的价值&#xff0c;有a&#xff0c;b两个人&#xff0c;都从左上角到右下角&#xff0c;且都只能向右向下走&#xff0c;a先出发&#xff0c;a每到一个格子&#xff0c;就会获得这个地方…

C#并行编程(2):.NET线程池

线程 Thread在总结线程池之前&#xff0c;先来看一下.NET线程。.NET线程与操作系统(Windows)线程有什么区别&#xff1f;.NET利用Windows的线程处理功能。在C#程序编写中&#xff0c;我们首先会新建一个线程对象System.Threading.Thread&#xff0c;并为其指定一个回调方法&…

ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程外(out-of-process)托管ASP.NET Core launchsettings.json文件在本视频中&#xff0c;我们将讨论在ASP.NET Core项目中launchsettings.json文件的重要性。launchsettings.json文件您将在项目根文件…

[CQOI2017] 老C的方块(网络流染色建图)

problem luogu-P3756 solution 据说要做网络流 24\text{24}24 题中的《方格取数问题》和《骑士共存问题》。 &#xff1f;&#xff1f;&#xff1f;那个不是直接最小割吗&#xff1f;哦原来是从黑白染色来理解的。我还是太水了。 这种题之所以能用网络流做&#xff0c;是因…

江湖召集:.NET开发者们看过来,这场长沙的开发者技术大会正是为你精心准备的大餐...

看过去&#xff0c;历史的尘埃与沧海桑田古语有云“近代中国&#xff0c;湖南独撑半边天”&#xff0c;湖南长沙&#xff0c;作为湖南省的省会&#xff0c;自古以来便是各界风云人士兴起之地。随着互联网时代的到来&#xff0c;长沙&#xff0c;这座历史悠久的文化名城&#xf…

C#并行编程(3):并行循环

初识并行循环并行循环主要用来处理数据并行的&#xff0c;如&#xff0c;同时对数组或列表中的多个数据执行相同的操作。在C#编程中&#xff0c;我们使用并行类System.Threading.Tasks.Parallel提供的静态方法Parallel.For和Parallel.ForEach来实现并行循环。从方法名可以看出&…

Acwing 252. 树

Acwing 252. 树 题意&#xff1a; 给定一个有 N 个点&#xff08;编号 0,1,…,N−1&#xff09;的树&#xff0c;每条边都有一个权值&#xff08;不超过 1000&#xff09;。 树上两个节点 x 与 y 之间的路径长度就是路径上各条边的权值之和。 求长度不超过 K 的路径有多少条…

.net 4.5部署到docker容器

.NET FX 应用程序也是可以容器化的&#xff0c;容器化的选项有两个&#xff1a;部署到windows容器部署到linux容器部署到windows容器由于.net本身就是运行在windows平台的&#xff0c;所以它与windows容器也是更加适合&#xff0c;你可以以iis镜像为基础&#xff0c;去编写你的…

将传统 WPF 程序迁移到 DotNetCore 3.0

介绍由于历史原因&#xff0c;基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序&#xff0c;如果将这些程序全部基于 DotNetCore 3.0 重写一遍显然是不现实的&#xff0c;但是 DotNetCore 是未来发展的趋势。所以本文通过以 WPF 为例&#xff…

.NET Core 时代已经到了,你准备好了吗

今天很多人都收到了阿里云函数计算支持.NET Core的短信了。通过访问 https://help.aliyun.com/document_detail/112379.html 你可以看到最新的说明。现在和过去的两年不同&#xff0c;因为最恶劣的时期已经过去&#xff0c;经历过了最黑暗的时刻&#xff0c;我们正在走向光明的…