a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學院 > 開發設計 > 正文

[Educational Codeforces Round 17 E (762E)] Radio stations

2019-11-14 10:01:16
字體:
來源:轉載
供稿:網友

題意

給出n個點,每個點有三圍(x,r,f) 兩個點是沖突的,當|xi?xj|≤min(ri,rj)且|fi?fj|≤k. k給出。 n≤105,0≤k≤10

題解

想法一: 按x從大到小枚舉點,每次在kdtree中詢問xj≤xi+ri且xj?rj≤xi且|fj?fi|≤k的點的個數加入答案,再將(xi,xi?ri,fi)插入KDtree里。

覺得想法一要寫起來好長,再想想

想法二: k最大就10,對每一個f值建二維線段樹,然后查詢?

還是好長

想法三: CDQ啊!。。忘了怎么寫了,感覺也不短

想法四: 對每一個fx離散化,并建BIT,存儲差分數據,來表示線段(xi?ri,xi+ri)的覆蓋(xi?ri的地方插入1,xi+ri+1的地方插入-1) 對所有點按照xi從大到小枚舉,對fi?kfi+k的BIT詢問xi位置覆蓋了幾條線段,加入答案中。 同時將xi?ri記錄下來,每次詢問之前將xj?rj<xi的點都在相應的BIT中刪去,這樣就能保證每次詢問合法了。

代碼

/// by ztx/// blog.csdn.net/hzoi_ztx#define Rep(i,l,r) for(i=(l);i<=(r);i++)#define rep(i,l,r) for(i=(l);i< (r);i++)#define Rev(i,r,l) for(i=(r);i>=(l);i--)#define rev(i,r,l) for(i=(r);i> (l);i--)#define Each(i,v) for(i=v.begin();i!=v.end();i++)#define each(v) v.begin(),v.end()#define r(x) read(x)typedef long long ll ;typedef double lf ;int CH , NEG ;template <typename TP>inline void read(TP& ret) { ret = NEG = 0 ; while (CH=getchar() , CH<'!') ; if (CH == '-') NEG = true , CH = getchar() ; while (ret = ret*10+CH-'0' , CH=getchar() , CH>'!') ; if (NEG) ret = -ret ;}#define maxn 100010LL#define maxf 10001LLstruct DATA { int x, r, f; bool Operator < (const DATA&B) const { return x < B.x; }} a[maxn];struct BIT { int sum, n, *C; BIT(int n) { this->n = n, sum= 0; C = new int[n+1](); } inline int get(int p) { int ret = 0; for (; p; p -= (p&(-p))) ret += C[p]; return ret; } inline void inc(int p,int x) { sum += x; for (; p <= n; p += (p&(-p))) C[p] += x; }} *B[maxf];std::vector<int>F[maxf];std::multiset<DATA> S;inline void insert(int i,int x) { int p = lower_bound(each(F[a[i].f]), a[i].x)-F[a[i].f].begin()+1; B[a[i].f]->inc(p, x);}int main() { int n, K, i, j, fl, fr; ll ans; r(n), r(K); Rep (i,1,n) { r(a[i].x), r(a[i].r), r(a[i].f); F[a[i].f].push_back(a[i].x); } Rep (i,1,10000) { std::sort(each(F[i])); B[i] = new BIT(F[i].size()); } std::sort(a+1, a+n+1); ans = 0; Rep (i,1,n) { while (!S.empty() && S.begin()->x<a[i].x) insert(S.begin()->r,-1), S.erase(S.begin()); fl = std::max(1,a[i].f-K), fr = std::min(10000,a[i].f+K); Rep (j,fl,fr) ans += B[j]->sum - B[j]->get(lower_bound(each(F[j]),a[i].x-a[i].r)-F[j].begin()); insert(i,1); S.insert((DATA){a[i].x+a[i].r,i,0}); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产成人精品无人区一区 | 欧美大粗吊男男1069 | 亚洲精品美女在线观看 | 久久国内免费视频 | 狠狠操夜夜操天天操 | 亚洲福利在线观看 | 亚洲成av人片在线观看 | 国产噜噜噜噜噜久久久久久久久 | 国产欧美日韩精品一区 | 日韩精品视频在线观看网站 | 综合 欧美 亚洲日本 | 日韩精品一区二区三区在线观看 | 亚洲精品视频在线 | 国产精品免费在线 | 在线成人av| 久久成人在线观看 | 99精品久久久久 | 999这里只有是极品 欧洲一区二区三区免费视频 | 成年免费观看视频 | 日本激情在线 | 国产成人精品高清久久 | 日本亚洲精品一区二区三区 | 欧美啊v | 国产成人在线一区二区 | 成人爽a毛片免费啪啪动漫 日本特级片 | 午夜在线小视频 | 久久久精品 | 久久久天堂国产精品女人 | 日本a视频 | 日韩精品av | 免费成人高清在线视频 | 欧美一区2区三区4区公司二百 | 成人在线视频观看 | 欧美色道 | 久久99精品国产麻豆婷婷洗澡 | 伊人久操 | 欧美国产日本一区 | 欧美成人一区二区 | 一区二区中文字幕 | 亚洲电影一区二区 | 国产精品国产三级国产aⅴ入口 |