区间重叠(不能更好,能做到)

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

来源:牛客网

超市里一共有 nnn 个货架,mmm 个商品,一开始商品的位置是被打乱的,小Why需要将商品全部归位。

小Why在给货架编号后,实现了每个商品所在货架必然在其应在货架之前。

小Why决定手推购物车按编号顺序依次访问每个货架。在访问货架时,小Why可以执行以下两个操作任意多次:

∙\bullet∙ 当购物车不为空时,将购物车中的一个商品放上货架。

∙\bullet∙ 当货架不为空时,将货架上的一个商品放入购物车。

当小Why跑完一趟后,如果仍有商品没被归位,那么小Why会再次返回 111 号货架重复以上过程。

超市里的购物车同一时刻最多能放 kkk 个商品,且每个货架容量无限,请你告诉小Why至少需要跑多少趟才能将商品全部归位。

输入描述:

复制代码

第一行包括三个整数 n,m,k (2≤n≤106,1≤m,k≤106)n,m,k \ (2 \leq n \leq 10^6 , 1\leq m,k\leq10^6)n,m,k (2≤n≤106,1≤m,k≤106),表示货架个数,商品个数和购物车容量。

接下来 mmm 行,每行有两个整数 sti,edi(1≤sti<edi≤n)st_{i},ed_{i} ( 1 \leq st_{i} < ed_{i} \leq n)sti​,edi​(1≤sti​<edi​≤n),表示第 iii 个商品的所在货架和应在货架。

输出描述:

复制代码
输出一个整数,表示最少需要的趟数。

分析:

从开始道路运到最后的道路,重叠的要放一起,差分加前缀和求出重叠次数最多的,÷购物车容量就是答案,要向上取整


cpp 复制代码
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
void solve()
{
  ll n,m,k;
  cin>>n>>m>>k;
  ll sums[n+1];
  memset(sums,0,sizeof sums);
  for(ll i=0;i<m;i++)
  {
      ll st,ed;
      cin>>st>>ed;
      sums[st]++;
      sums[ed]--;
  }
  ll maxn=-1;
  for(ll i=1;i<=n;i++)
  {
      sums[i]+=sums[i-1];
      maxn=max(sums[i],maxn);
  }
 cout<<(maxn/k+(maxn%k!=0))<<'\n';
}
    int main()
   {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    ll t=1;
    while(t--)
    solve();
    return 0;
    }
相关推荐
智者知已应修善业11 小时前
【51单片机2个外部中断切换LED花样】2024-1-3
c++·经验分享·笔记·算法·51单片机
8Qi812 小时前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
春日见12 小时前
五分钟入门强化学习DDPG
大数据·人工智能·算法·机器学习·计算机视觉
玖釉-12 小时前
Vulkan 示例解析:gltfscenerendering.cpp 如何渲染一个复杂 glTF 场景
c++·windows·图形渲染
vivo互联网技术12 小时前
ICLR 2026 | LiveMoments 用参考图引导的扩散模型提升重选封面帧画质
人工智能·算法·aigc技术探索
落羽的落羽12 小时前
【算法札记】练习 | Week5
linux·服务器·c++·人工智能·计算机网络·算法·哈希算法
玖釉-12 小时前
编辑距离(Edit Distance)——从字符串相似度到动态规划经典模型
算法·leetcode·动态规划
c2385613 小时前
c/c++中的二叉树进阶
c语言·c++·算法
晚风吹红霞13 小时前
C++模板进阶:非类型参数、特化、分离编译与优缺点解析
开发语言·c++