NC202498. 货物种类
描述
输入描述
(包括l和r)在第一行中给出两个正整数,分别代表仓库的数目和进货的次数。接下来 m 行,每行三个正整数。编号在l和r之间的仓库收进编号为d的货物。
输出描述
在一行中输出存放货物种类最多的仓库编号,若满足条件的仓库不止一个,则输出编号最小的那个。
示例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; }