1. 程式人生 > 其它 >牛客 牛牛澆樹(差分)

牛客 牛牛澆樹(差分)

技術標籤: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阿明),一起加油、一起學習進步!
Michael阿明