補一道差分基礎題
時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
64bit io format: %lld
hj養了很多花(99999999999999999999999999999999999盆),並且喜歡把它們排成一排,編號0~99999999999999999999999999999999998,每天hj都會給他的花澆水,但是他很奇怪,他會澆n(1 <= n <= 2 * 105)次水,每次都會選擇乙個區間[l, r],(0 <= l <= r <= 106),表示對區間[l, r]的花都澆一次水。現在問你,通過這些操作之後,被澆了i(1 <= i <= n)次水的花的盆數。
輸入:第一行乙個n,表示hj的操作次數,接下來的n行,表示每一次選擇的澆水區間。
輸出:輸出n個數字cnt1, cnt2……cntn,(用空格隔開)cnti表示被澆了i次水的花的盆數。示例1
複製
3複製0 31 3
3 8
6 2 1示例2
複製
3複製1 32 4
5 7
5 2 0對於樣例1的圖形解釋
被澆了1次的有:0, 4, 5, 6, 7, 8, cnt1 = 6
被澆了2次的有:1, 2. cnt2 = 2
被澆了3次的有: 3 . cnt3 = 3
差分思想
#include#include#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1000000;
int l[maxn];
int r[maxn];
int a[maxn];
int sum[maxn];
mapma;
int main()
for(int i=minn;i<=maxx;i++)
for(int i=minn;i<=maxx;i++)
for(int i=1;i<=n;i++)
cout<
return 0;
}
牛客HJ澆花。
我也不知道這是什麼型別的題,算是簡單模擬吧。但是有個方法很讚。開兩個陣列,乙個模擬花,乙個記錄不同澆花次數花的數量 要找澆水的次數,那麼記每次澆水的開頭和結尾就行了,a b 那麼f a f b 1 然後0 n迴圈 剪枝的話,可以找到最小澆花的數min和最大澆花的數max。找到當前的澆水次數,t f ...
牛客華為機試HJ1
原題傳送門 1 思路分析 思路1 用空格去切,取切完的最後乙個字串長度即可。思路2 從後往前遍歷,直到遇到空格退出迴圈,設找到的第1個空白字元下標為start,s.length 1 start即為所求。示例 遍歷可得start 5,s.length 1 start 14 1 5 8。2 實現 j a...
牛客華為機試HJ39
原題傳送門 1 思路 把ip全轉換為32bit 字串,模擬與運算。2 實現 import sys if sys.platform linux file in open input hj39.txt sys.stdin file in 若ip位址或子網掩碼格式非法則輸出1,若ip1與ip2屬於同一子網...