zoukankan      html  css  js  c++  java
  • 101. 最高的牛

    题目分析

     本题采用差分数组,便于将一个区间的数全部减一,初始化height[1]=h(表示当前所有的牛身高都是h,因为height数组在全局变量中,所以全部为0,根据差分数组的性质:差分数组的前缀和(b[1]+b[2]+...+b[i])等于数组中的某个元素(a[i]))。有上述分析可知,区间不会有交集,所以将所给的区间端点内部的所有数-1(因为求最大身高所以-1即可),最后求每一项的前缀和,得到所有牛可能的最大身高。

    #include <iostream>
    #include <set>
    using namespace std;
    
    const int N = 10010;
    
    int height[N];
    
    int main()
    {
    	int n, p, h, m;
    	cin >> n >> p >> h >> m;
    	height[1] = h;
    	
    	set<pair<int, int> > existed;  // 题目中给定的数据可能会有重复,故用set去重
    	for(int i = 1, a, b; i <= m; ++ i)
    	{
    		cin >> a >> b;
    		if(a > b)	swap(a, b);  // 端点的大小要进行比较
    		if(!existed.count({a, b}))
    		{
    			existed.insert({a, b});
    			height[a + 1] --;  // 差分数组的应用,区间[a + 1, b - 1]内所有的数-1
    			height[b] ++;
    		}
    	}
    	
    	for(int i = 1; i <= n; ++ i)
    	{
    		height[i] += height[i - 1];
    		cout << height[i] << endl;  // 前缀和得到每头牛的身高
    	}
    	
    	return 0;
    } 
    

      

  • 相关阅读:
    实验一
    BZOJ 2564
    P4557 [JSOI2018]战争
    移动自动化-Mac-IOS-appium环境搭建
    Node安装mac版本
    删除N天前文件和空文件
    Python之jsonpath模块
    性能学习
    参数化
    查找测试用例
  • 原文地址:https://www.cnblogs.com/mjn1/p/11823105.html
Copyright © 2011-2022 走看看