區間和
acwing 802.區間和
這道題所展現的情況就是,資料並不是很多,利用到的元素值也不大,但關鍵就是下標太大,無法正常的以陣列下標來進行操作。因此,離散化,在這裡就是很合適了,把大的下標對映為小的下標後再進行處理。
對於這道題的解題步驟具體可分為一下幾步:
1.儲存,,,就是將所用用到的下標存起來;
2.排序加去重,,,為離散化做好前期準備;
3.二分查詢對映後的下標;
4.執行在某個位置加數的操作,用離散化後的下標代替那個想要對其操作的位置
5.求字首和
6.根據字首和陣列得到答案。
具體解釋就這麼多啦
上**:
#include
#include
#include
using
namespace std;
typedef pair<
int,
int> pii;
const
int n=
300010
;int a[n]
,s[n]
;vector<
int> alls;
vector add;
vector query;
intfind
(int x)
return r+1;
}int
main()
);//區間中某位置上加c的操作
alls.
push_back
(x);
//將所有涉及到x軸上的點存入alls中
}for
(int i=
1;i<=m;i++))
;//將所有涉及到x軸上的點存入alls中
alls.
push_back
(l);
alls.
push_back
(r);
}//排序加去重
sort
(alls.
begin()
,alls.
end())
; alls.
erase
(unique
(alls.
begin()
,alls.
end())
,alls.
end())
;for
(auto item: add)
for(
int i=
1;i <= alls.
size()
;i++
)for
(auto item: query)
return0;
}
還有一篇,待續,白天再來補上。。。 字首和 離散化
現在正在上課,但我還是要同步更新博文。滑稽 先講乙個離散化,就是把幾個離的特別遠的數在不影響結果的情況下,變成相近的數。倒是沒什麼影響,但應用在陣列下標的話可以節約空間。貌似和hash有點像 直接拍 給定n個數,如果乙個數出現x次,則對答案的貢獻為x 2 求這n個數對答案的貢獻是多少。n 10000...
B Light bulbs 離散化 差分
b.light bulbs 離散化 差分 題意 n個燈剛開始是關的,m次操作對 l,r 內的全部的燈反轉。問最後有幾個燈亮著。思路 剛開始差分直接便利了所有點,t了。所有只需要考慮哪些有貢獻的2 m個點就行了,對於區間中哪些0的部分,就不需要遍歷了。對於重複的點也不用管。include using ...
數列(字首和,離散化)
p1667 數列 給定乙個長度是n的數列a,我們稱乙個數列是完美的,當且僅當對於其任意連續子串行的和都是正的。現在你有乙個操作可以改變量列,選擇乙個區間 x,y 滿足ax ax 1 ay 0,1輸入格式 第一行乙個數n,以下n個數。資料規模 對於20 的資料,滿足1 n 5 對於100 的資料,滿足...