BZOJ2422 Times 樹狀陣列

2022-05-20 08:07:37 字數 1178 閱讀 7594

小y作為一名資深的dotaer,對視野的控制有著深刻的研究。每個單位在一段特定的時間內會出現在小y的視野內,除此之外的時間都在小y看不到的地方。在小y看來,視野內的單位數量越多,他就越安全,因為這意味著有可能藏在陰影中的單位就越少。現在,小y已經知道了每個單位會在什麼時候出現在視野內,他想知道,在一段時間內,總共有多少個單位出現在他的視野內過。

第一行有兩個整數n,m,表示一共有n個單位,而小y有m個問題。

接下來n行,每行兩個數a,b,表示這個單位a秒時出現在小y的視野內,出現了b秒。

接下來m行,每行兩個整數x,y,表示從x秒開始,經過y秒,其中有多少個單位出現過。

m行,即對於小y提出的每個問題的答案。

3 22 5

0 10

5 80 6

8 23

2【資料範圍】

1<=n,m<=200000

1<=x,y,a,b<=maxlongint

題解:這題的思路還是比較好的。

正著做比較難,考慮反著做。我們可以統計在那段時間內它沒有看到過多少個單位,則要麼b

#include #include #include #include using namespace std;

typedef long long ll;

const int maxn=200010;

int n,m,nm,tot;

int x[maxn],y[maxn],l[maxn],r[maxn];

struct bit

inline int query(int x)

}s1,s2;

struct node

p[maxn<<2];

bool cmp(const node &a,const node &b)

while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();

return ret*f;

}int main()

} for(i=1;i<=n;i++) s1.updata(y[i]),s2.updata(x[i]);

for(i=1;i<=m;i++) printf("%d\n",n-(s1.query(l[i]-1)+s2.query(nm)-s2.query(r[i])));

return 0;

}

bzoj1246(樹狀陣列)

樹狀陣列的靈活運用,維護的是最大值,因為整個陣列就是乙個字首最大值,所以可以用實現,求乙個字首最大值,和更新pos之後的最大值。很好的運用,多回顧思考 include include include include includeusing namespace std const int n 200...

bzoj 2762 樹狀陣列

題意 給出一些形如 ax b 1 新加入乙個不等式 2 刪除乙個不等式 3 詢問當x k時滿足的不等式的個數 對於每乙個不等式,通過變形就可以得到使它成立的x的範圍 那麼就變成區間修改,單點查詢,樹狀陣列維護就好 注意 1 討論a 0 a 0 a 0的情況 2 由於k有非正數,所以要加上10 6 1...

bzoj 1935(樹狀陣列)

傳送門 題解 由於是靜態問題所以可以離線處理,所有點 詢問拆成4個 按x排序,二維可以轉成一維,相當於每次query到的就是當前已插入的點,而只有這些點能對query的返回值造成貢獻。p.s.對於x座標相同的插入 詢問,要考慮這幾個操作的先後順序 include using namespace st...