牛客货物种类

文章提供了一段C++代码,使用map和vector数据结构记录每个仓库的货物种类,通过遍历和更新数据来找出存放货物种类最多的仓库。
摘要由CSDN通过智能技术生成

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

某电商平台有n个仓库,编号从1到n。

当购进某种货物的时候,商家会把货物分散的放在编号相邻的几个仓库中。

我们暂时不考虑售出,你是否能知道,当所有货物购买完毕,存放货物种类最多的仓库编号为多少?

输入描述:

在第一行中给出两个正整数n,m,1≤n,m≤105n, m, 1\le n, m \le 10^5n,m,1≤n,m≤105,分别代表仓库的数目和进货的次数。

接下来 m 行,每行三个正整数l,r,d,1≤l,r≤n,1≤d≤109l,r,d,1 \le l,r \le n, 1 \le d \le 10^9l,r,d,1≤l,r≤n,1≤d≤109。编号在l和r之间的仓库收进编号为d的货物。

(包括l和r)

输出描述:

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

示例1

输入

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

输出

3

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int main(){
    int n,m;cin>>n>>m;
    map<int,int>p;//该仓库的货物数量
    vector<int>q[N],z[N];//起点,终点
    for(int i=1;i<=m;++i){
        long long l,r,d;cin>>l>>r>>d;
        q[l].push_back(d);
        z[r+1].push_back(d);//因为包含r,所以r+1为终点
    }
    int ans=0;
    int ku,sum=0;
    for(int i=1;i<=n;++i){//遍历整个仓库
        for(int j=0;j<q[i].size();++j){//遍历起点
            int temp=q[i][j];//编号为d的货物
            p[temp]++;//放进去
            if(p[temp]==1)ans++;//找到新的种类+1
        }
        for(int j=0;j<z[i].size();++j){//遍历终点
           int temp=z[i][j];//编号为d的货物
            p[temp]--;//放完了恢复初始化
            if(p[temp]==0)ans--;//前面为d的货物放完了,就-1
        }
        if(ans>sum){sum=ans;ku=i;}//找最大的种类数
    }
    cout<<ku;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值