首页 > 其他分享 >L3-017 森森快递(天梯赛)

L3-017 森森快递(天梯赛)

时间:2023-04-10 11:35:07浏览次数:53  
标签:node const minn cl 017 L3 天梯 ans 区间

https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805047638999040

大意是在一条直线上,有N个从0..N-1编号的城市,每个城市之间的道路有最大负载ai,现在有M张从i城到j城的运货订单,假设每个城市的货物无限,问在某一时刻,如何安排订单的运输,能使得运输的货物重量最大且符合道路的限制?

分析:开始想到的是按照区间长度依次操作 因为小区间对别的区间的影响可能性要小一些 但是这样做是错误的 就算影响小一些 但是仍然可能有

正确的做法是 按照第一关键字右端点从小到大 第二关键字左端点从大到小排序

为什么?

首先,这是一个区间调度问题,性质如同问:有许多项工作,每个工作有起始结束时间,目标是尽可能多的选择工作,问最多可参与几项工作? 工作结束得越早,那么之后可选择的工作自然越多. 这道题是一样的,货物的终点站越靠左,那么留出了越多道路给后面的订单. 这里是贪心的思想.

然后就线段树区间修改区间最小值即可

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
typedef struct node{
	int l, r;
	ll minn, f;
	bool operator < (const node x) const {
		if(x.r != r)	
			return x.r > r;
		else
			return x.l < l;
	}	
}node; 
node tree[maxn<<2];
node ans[maxn];
ll minn;

void down(int k){
	if(tree[k].f){
		tree[k<<1].f += tree[k].f;
		tree[k<<1|1].f += tree[k].f;
		tree[k<<1].minn -= tree[k].f;
		tree[k<<1|1].minn -= tree[k].f;
		tree[k].f = 0; 
	}	
}

void build(int k, int l, int r){
	tree[k].l = l, tree[k].r = r;
	if(l == r){
		scanf("%lld", &tree[k].minn);
		return;
	}
	int mid = (l+r)>>1;
	build(k<<1, l, mid);
	build(k<<1|1, mid+1, r);
	tree[k].minn = min(tree[k<<1].minn, tree[k<<1|1].minn);
}

void query(int k, int l, int r, int cl, int cr){
	if(l >= cl && r <= cr){
		minn = min(minn, tree[k].minn);
		return;
	}	
	down(k);
	int mid = (l+r)>>1;
	if(cl <= mid)	query(k<<1, l, mid, cl, cr);
	if(cr > mid)	query(k<<1|1, mid+1, r, cl ,cr);
}

void swap(int &x, int &y){
	int t = x; x = y; y = t;
}

void updata(int k, int l, int r, int cl, int cr, ll c){
	if(l >= cl && r <= cr){
		tree[k].f += c;
		tree[k].minn -= c;
		return;
	}	
	down(k);
	int mid = (l+r)>>1;
	if(cl <= mid)	updata(k<<1, l, mid, cl, cr, c);
	if(cr > mid)	updata(k<<1|1, mid+1, r, cl, cr, c);
	tree[k].minn = min(tree[k<<1].minn, tree[k<<1|1].minn);
} 

int n, q;
int main(){
	int a, b;
	scanf("%d %d", &n, &q);
	build(1, 1, n-1);
	for(int i = 0; i < q; ++ i){
		scanf("%d %d", &a, &b);
		if(a > b)	swap(a, b);
		ans[i].l = a+1;
		ans[i].r = b;	
	}
	sort(ans, ans+q);
	ll sum = 0;
	for(int i = 0; i < q; ++ i){
		minn = 1e18;
		query(1, 1, n-1, ans[i].l, ans[i].r);
		sum += minn;
		updata(1, 1, n-1, ans[i].l, ans[i].r, minn);
	}
	printf("%lld\n", sum);
	return 0;
}

标签:node,const,minn,cl,017,L3,天梯,ans,区间
From: https://www.cnblogs.com/wzxbeliever/p/17302377.html

相关文章

  • GhostDoc Enterprise.v2022.2.22190.VS2017-VS2022.Extension安装包分享
    这个网站似乎是屏蔽了中国大陆和中国香港的IP,不知道怎么想的。似乎是有点看不起我们?原版安装包v2022.2.22190,支持vs2017到vs2022,可以通过百度网盘下载。链接:https://pan.baidu.com/s/13hrjHHn_51RDUMiIcylu-A?pwd=dxym提取码:dxym -------------------------------------......
  • 『0017』 - Solidity Types - Solidity 枚举(Enums)
    作者:黎跃春,案例下面的代码是我对官方案例作了简单的修改而成。ActionChoices就是一个自定义的整型,当枚举数不够多时,它默认的类型为uint8,当枚举数足够多时,它会自动变成uint16,下面的GoLeft==0,GoRight==1,GoStraight==2,SitStill==3。在setGoStraight方法中,我们传入的参数......
  • dnstracer CVE-2017-9430 复现
    author:cxingdate:2023-4-7introduction:DNSTracer是一个用来跟踪DNS解析过程的应用程序。DNSTracer1.9及之前的版本中存在栈缓冲区溢出漏洞。攻击者可借助带有较长参数的命令行利用该漏洞造成拒绝服务(应用程序崩溃)、甚至RCE。环境搭建本人Linux虚拟机信息如下:OS64位......
  • EasyARM i.MX283A 完整系统制作指南(Linux 4.13.2+U-Boot 2017.09+BusyBox 1.27.2+Qt5
    原文:https://www.taterli.com/3213/标题老长呢.反正什么都是新的,所有都是开源的,除了下载工具以外,所有源码都有(据说下载工具也有,我懒得找了.),编译器源码自己也能做,但是没必要了.代码下载地址:https://github.com/nickfox-taterli/imx283a-new/releases/tag/v0.1首先有一个U......
  • Cesium 案例(三) Web Map Service(WMS) Washington DC 2017
    WMSCesium.Ion.defaultAccessToken="token";   constviewer=newCesium.Viewer("cesiumContainer");   //AddaWMSimagerylayer   constlayer=newCesium.ImageryLayer(    newCesium.WebMapServiceImageryProvider({ ......
  • [2020CCCC天梯赛] L3-1 那就别担心了(30分)
    [2020CCCC天梯赛]L3-1那就别担心了(30分)下图转自“英式没品笑话百科”的新浪微博——所以无论有没有遇到难题,其实都不用担心。博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题(开玩笑的,千万别以为这是真正的逻辑自洽的定义......
  • [2021CCCC天梯赛] L3-1 森森旅游(30分)
    [2021CCCC天梯赛]L3-1森森旅游(30分)题目描述好久没出去旅游啦!森森决定去Z省旅游一下。Z省有n座城市(从1到n编号)以及m条连接两座城市的有向旅行线路(例如自驾、长途汽车、火车、飞机、轮船等),每次经过一条旅行线路时都需要支付该线路的费用(但这个收费标准可能不止一种,......
  • [2021CCCC天梯赛] L3-2 还原文件(30分)
    [2021CCCC天梯赛]L3-2还原文件(30分)一份重要文件被撕成两半,其中一半还被送进了碎纸机。我们将碎纸机里找到的纸条进行编号,如图1所示。然后根据断口的折线形状跟没有切碎的半张纸进行匹配,最后还原成图2的样子。要求你输出还原后纸条的正确拼接顺序。图1纸条编号图2还原......
  • [2022CCCC天梯赛] L3-1 千手观音(30分)
    [2022CCCC天梯赛]L3-1千手观音(30分)题目描述人类喜欢用10进制,大概是因为人类有一双手10根手指用于计数。于是在千手观音的世界里,数字都是10000进制的,因为每位观音有1000双手……千手观音们的每一根手指都对应一个符号(但是观音世界里的符号太难画了,我们暂且用小写英......
  • HDOJ1017 A Mathematical Curiosity
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1017这个题目其实挺坑的。首先是N,应该挺多人纠结过这个N,N其实是blocks(块),一块有未知个cases。一个块的结束标志是0,0。然后是PE的问题,空格、空行,我也是被坑的好惨。这里应该是每个块之间有一个空行!也就是说,最后一个块是不......