列表

详情


NC202498. 货物种类

描述

某电商平台有n个仓库,编号从1到n。
当购进某种货物的时候,商家会把货物分散的放在编号相邻的几个仓库中。
我们暂时不考虑售出,你是否能知道,当所有货物购买完毕,存放货物种类最多的仓库编号为多少?

输入描述

在第一行中给出两个正整数,分别代表仓库的数目和进货的次数。
接下来 m 行,每行三个正整数。编号在l和r之间的仓库收进编号为d的货物。
(包括l和r)

输出描述

在一行中输出存放货物种类最多的仓库编号,若满足条件的仓库不止一个,则输出编号最小的那个。

示例1

输入:

5 5
1 1 1
3 3 1
2 5 2
5 5 1
4 5 1

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 226ms, 内存消耗: 18160K, 提交时间: 2020-03-09 17:08:13

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10000;
map<int,int> v[N],now;
int n,m,l,r,d;
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&l,&r,&d);
		++v[l][d];
		--v[r+1][d];
	}
	
	int cnt=0,p;
	for(int i=1;i<=n;i++)
	{
		for(auto it :v[i])
		{
			//it.first种类  it.second个数 
			now[it.first]+=it.second;
			if(!now[it.first]) now.erase(it.first);
		}
		if(now.size()>cnt)
		{
			cnt=now.size();
			p=i;
		}
	}
	cout<<p<<endl;
}

C++ 解法, 执行用时: 189ms, 内存消耗: 17616K, 提交时间: 2022-04-20 23:53:08

#include <bits/stdc++.h>
using namespace std;
int n,m;
map<int, int>mp[100005],now;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int l,r,d;
		scanf("%d%d%d",&l,&r,&d);
		++mp[l][d];
		--mp[r+1][d];
	}
	int cnt=0,id=0;
	for(int i=1;i<=n;i++)
	{
		for(auto it:mp[i])
		{
			now[it.first]+=it.second;
			if(!now[it.first]) now.erase(it.first);
		}
		if(now.size()>cnt)
		{
			cnt=now.size();
			id=i;
		}
	}
	printf("%d\n",id);
	return 0;
}

上一题