1.练习项目:
问题描述
在库存管理系统中,跟踪和调节商品库存量是关键任务之一。小蓝经营的仓库中存有多种商品,这些商品根据类别和规格被有序地分类并编号,编号范围从 1 至 n。初始时,每种商品的库存量均为 0。
为了高效地监控和调整库存量,小蓝的管理团队设计了 m 个操作,每个操作涉及到一个特定的商品区间,即一段连续的商品编号范围(例如区间 [L,R])。执行这些操作时,区间内每种商品的库存量都将增加 1。然而,在某些情况下,管理团队可能会决定不执行某些操作,使得这些操作涉及的商品区间内的库存量不会发生改变,维持原有的状态。
现在,管理团队需要一个评估机制,来确定如果某个操作未被执行,那么最终会有多少种商品的库存量为 0。对此,请你为管理团队计算出,每个操作未执行时,库存量为 0 的商品的种类数。
输入格式
第一行包含两个整数 n 和 m,分别表示商品的种类数和操作的个数。
接下来的 m 行,每行包含两个整数 L 和 R,表示一个操作涉及的商品区间。
输出格式
输出共 m 行,每行一个整数,第 i 行的整数表示如果不执行第 i 个操作,则最终库存量为 0 的商品种类数。
2.选择课程
在蓝桥云课中选择课程《16届蓝桥杯省赛无忧班(C&C++ 组)4期》,选择第二章“基础算法”编程26并开始练习。
3.开始练习
(1)源码:
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=3e5+10;
ll diff[N],l[N],r[N],prefix[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>l[i]>>r[i];
diff[l[i]]+=1;
diff[r[i]+1]-=1;
}
for(int i=1;i<=n;i++){
diff[i]+=diff[i-1];
}
ll sum=0;
for(int i=1;i<=n;i++){
prefix[i]=prefix[i-1]+(diff[i]==1);
sum+=(diff[i]==0);
}
for(int i=1;i<=m;i++){
cout<<prefix[r[i]]-prefix[l[i]-1]+sum<<'\n';
}
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。