牛客 牛牛澆樹(差分)
阿新 • • 發佈:2020-12-23
技術標籤:LintCode及其他OJ
文章目錄
1. 題目
連結:https://ac.nowcoder.com/acm/contest/10323/A
來源:牛客網
牛牛現在在花園養了n棵樹,按順序從第1棵到第n棵排列著。
牛牛每天會按照心情給其中某一個區間的樹澆水。
例如如果某一天澆水的區間為[2,4],就是牛牛在這一天會給第2棵,第3棵和第4棵樹澆水。
樹被澆水後就會成長,為了簡化問題,我們假設在初始時所有樹的高度為0cm。
每過去一天樹會自然成長1cm,每次樹被澆水後當天會額外成長1cm。
m天中牛牛每天都都會選一個區間[l,r]
對這個區間內的樹進行澆水,牛牛想知道m天后有多少棵樹的高度為奇數
2. 解題
class Solution {
public:
/**
* 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可
* 返回m天后高度為奇數的樹的數量
* @param n int整型
* @param m int整型
* @param l int整型vector
* @param r int整型vector
* @return int整型
*/
int oddnumber(int n, int m, vector<int>& l, vector<int>& r) {
// write code here
vector<int> h(n+2 , 0);
for(int i = 0; i < m; ++i)
{
h[l[i]]++; // 左端點++
h[r[i]+1]--; // 右端點+1 的位置 --
}
vector<int> ans(n, m);//初始化為自然長高高度
int sum = 0, count = 0;
for (int i = 1; i <= n; ++i)
{
sum += h[i];//字首和為澆水長得高度
ans[i-1] += sum;
if(ans[i-1]%2)//高度為奇數
count++;
}
return count;
}
};
100ms C++
我的CSDN部落格地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!