思路:這題我一開始想到了用字首和來直接計算查詢的區間中1的個數(即:失去這個線段後會不覆蓋的點數),但是不知道怎麼快速更新這個點被幾個線段覆蓋過。看了題解恍然大悟!用差分;
差分記錄的是每個元素跟前乙個元素的差值,也是增量,那麼區間更新[l.r]+x時,l的位置上的數與前乙個數的差值大了x,r+1上的數小了x。。。求i位置上的值,就i位置的字首和;
**如下:
#include#define rep(i,x,y) for (int i=(x);i<=(y);i++)
using namespace std;
const int n=1e5+5;
int n,m,a[n],id,mi,l[n],r[n],sum[n],all;//sum存字首和(從1-i中1的數量),a存差分所以每個元素的值是字首和
int main()
mi=n+1;
for (int i=m;i;i--) if (sum[r[i]]-sum[l[i]-1]printf("%d %d\n",id,all+mi);
return 0;
}
牛客練習賽34 C
題目描述 小w有m條線段,編號為1到m。用這些線段覆蓋數軸上的n個點,編號為1到n。第i條線段覆蓋數軸上的區間是l i r i 覆蓋的區間可能會有重疊,而且不保證m條線段一定能覆蓋所有n個點。現在小w不小心丟失了一條線段,請問丟失哪條線段,使數軸上沒被覆蓋到的點的個數盡可能少,請輸出丟失的線段的編號...
牛客練習賽34 C題
小w有m條線段,編號為1到m。用這些線段覆蓋數軸上的n個點,編號為1到n。第i條線段覆蓋數軸上的區間是l i r i 覆蓋的區間可能會有重疊,而且不保證m條線段一定能覆蓋所有n個點。現在小w不小心丟失了一條線段,請問丟失哪條線段,使數軸上沒被覆蓋到的點的個數盡可能少,請輸出丟失的線段的編號和沒被覆蓋...
2018牛客練習賽34
c little w and segment coverage 官方題解 題意 給m個區間,把每個區間上的點都加1,然後問刪除哪乙個點後不會被覆蓋的點最少 我覺得這道題挺好的,就適合我們這些小白做,看題解能夠收穫很多 哇,線段樹原來還闊以統計區間內小於等於某個數x的個數有多少個呀,我太挫了,這個竟然...