小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...