商品库存管理 19716 [前缀和+差分] 2024省赛

 

传送门 0商品库存管理 - 蓝桥云课

        思路:如果不执行某个操作后,商品的库存量变为0,那么说明,这个商品的库存量只能为1 所以我们统计库存量为1的商品

样例区间
1 2
2 4
3 5

+1次数  1 2 2 2 1
id      1 2 3 4 5 

 




const int N = 3e5 + 10;

int n,m;
int a[N],A[N];
int l[N],r[N];

void insert(int l,int r)
{
	a[l] ++;
	a[r + 1] --;
}

void solve()
{
	cin >> n >> m;
	for (int i = 1;i <= m;i ++)
	{
		cin >> l[i] >> r[i];
		insert(l[i],r[i]);//差分
	}	
	
	for (int i = 1;i <= n;i ++) a[i] += a[i - 1];//前缀和
	
	int cnt = 0;//记录始终为0的位置的个数
	
	for (int i = 1;i <= n;i ++) 
	{
		if (a[i] == 1) A[i] = 1;//如果操作次数一共为1,删掉这个区间后就变成了0;记录这个位置,再用一个前缀和来快速计算
		if (!a[i]) cnt ++;
	}
	
	for (int i = 1;i <= n;i ++) A[i] += A[i - 1];
	
	for (int i = 1;i <= m;i ++)
		cout << A[r[i]] - A[l[i] - 1] + cnt << endl;
}
 


你可能感兴趣的:(蓝桥杯,算法,c++,数据结构)