日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

I - 秋實大哥下棋

Time Limit: 3000/1000MS (Java/Others) ??? Memory Limit: 65535/65535KB (Java/Others)
Submit?Status

勝負胸中料已明,又從堂上出奇兵。秋實大哥是一個下棋好手,獨孤求敗的他覺得下棋已經無法滿足他了,他開始研究一種新的玩法。

在一個n×m的棋盤上,放置了k個車,并且他在棋盤上標出了q個矩形,表示矩形內部是戰略要地。

秋實大哥要求一個矩形內的每一個格子,都至少能被一輛在矩形內的車攻擊到,那么這個矩形就是被完整保護的。

現在秋實大哥想知道每一個矩形是否被完整保護。

Input

第一行包含四個整數nmkq,表示棋盤的大小,車的數量以及矩形的數量。

接來下k行,每行包含兩個整數xy,表示有一輛車位于從左往右第x列,從下往上第y行。

接下來q行,每行包含四個整數x1y1x2y2,表示一個矩形的左下角和右上角坐標。

1nm1051kq2?1051x1x21051y1y21051x1051y105

Output

輸出q行,對于每一次詢問,這個矩形若被完整保護了輸出"YES",否則輸出"NO"。

Sample input and output

Sample InputSample Output
4 3 3 3 1 1 3 2 2 3 2 3 2 3 2 1 3 3 1 2 2 3 YES YES NO

Hint

樣例的圖形如下:

?

?

解題報告

1.如果一個矩形能被完整保護,肯定在矩形的寬?or?長上的車的投影是一段連續的曲線且全部被覆蓋.

2.首先先給矩形排個序(按照X2的大小),還有車(X坐標)

3.之后我們先考慮這些矩形能否在Y方向達成(被覆蓋),注意到X,Y的范圍皆為1e5,所以不必采用離散化,從左往右邊掃,遇到車就把它所對的Y的方向線段加上一個值val.

注意到這個加的值是必須考究的,首先我們想因為矩形的X2坐標是遞增的,一個在前面的車在Y方向的效果是必須被后面所抵消的(很顯然,前面車對Y方向的影響是沒有用的,因為前面的車很可能已經在后面的矩形外了)

因此我們必須維護這個車在Y方向投影值的max,有了這個還不夠,我們還不知道這個val值如何計算,才能使得我們能快速計算這個矩形的Y方向被覆蓋(注意到很有可能這個線段

上的某一個部分是前面的車所產生的。。因此為了判斷正確,我們必須設計好這個val值)

4.

以下為例子:?(?x為車?)

?

3?.?.?.?x?.

2?x?.?.?.?.

1?.?.?.?.?.?

0?1?2?3?4?5

?

我們考慮左下角坐標為(2,2)?,右上角坐標為(4,3)?的矩形,我們從左往右掃

首先遇到了車(1,2),我們給Y方向的(2,2)加上一個值?value1;

之后我們掃到了另外一個車和矩形,那么我們該處理誰呢?,顯然是車

該車的坐標為(4,3),我們給Y方向的(3,3)加上一個值?value2;

之后掃到矩形的右邊,矩形的Y方向為(2,3),我們在(2,3)方向的值為value1與value2..,那么如何才能確定呢。。。

用X值!,每個方向的投影val值為這個車的X值,并且維護這個最大值,這樣我們就可以判斷了。why?

當我們判斷[L1,L2]上時,我們只查詢這里面的最小值,如果這里面的最小值小于了矩形的X1,那么這個矩形肯定在Y方向沒法被完全保護..

?

至此,就解決了本題.?

?

#include <iostream> #include <cstring> #include <cstdio> #include <algorithm>using namespace std; const int maxn = 2e5 + 5000; int n,m,k,q; typedef struct Node {int l,r,min; };typedef struct Area {int x1,x2,y1,y2,id;friend bool operator < (const Area&a,const Area& b){return a.x2 < b.x2;} };typedef struct Point {int x,y;friend bool operator < (const Point &a,const Point & b){return a.x < b.x;} }; //bool protect[maxn]; //矩形保護 Node tree[4*maxn]; Area s[maxn]; Point p[maxn];void push_up(int cur) {tree[cur].min = min(tree[2*cur].min , tree[2*cur+1].min ); } // 把點pos的權值設置為v(取較大) void updata(int pos,int v,int cur) {int l = tree[cur].l , r = tree[cur].r; if (l == r){tree[cur].min = max(tree[cur].min,v);}else{int mid = l + (r-l)/2;if (mid >= pos)updata(pos,v,2*cur);elseupdata(pos,v,2*cur+1);push_up(cur);} }int query(int ql,int qr,int cur) {int l = tree[cur].l , r = tree[cur].r;if (ql <= l && qr >= r)return tree[cur].min;else{int mid = l + (r-l)/2;int res = 1 << 28;if (mid >= ql)res = min(res,query(ql,qr,2*cur));if (mid < qr)res = min(res,query(ql,qr,2*cur+1));return res;} }void build_tree(int cur,int l ,int r) {tree[cur].l = l , tree[cur].r = r , tree[cur].min = -1;if (r > l){int mid = l + (r-l)/2;build_tree(2*cur,l,mid);build_tree(2*cur+1,mid+1,r);}}int main(int argc,char *argv[]) {scanf("%d%d%d%d",&n,&m,&k,&q);build_tree(1,1,max(n,m)+50);for(int i = 0 ; i < k ; ++ i){int x,y;scanf("%d%d",&x,&y);p[i].x = x , p[i].y = y;}memset(protect,false,sizeof(protect));for (int i = 0 ; i < q ; ++ i){scanf("%d%d%d%d",&s[i].x1,&s[i].y1,&s[i].x2,&s[i].y2);s[i].id = i;}sort(p,p+k);sort(s,s+q);int k1 = 0 , k2 = 0 ; // 記錄目前在線右邊邊的車,矩形 for(int i = 1 ; i <= n ; ++ i) //掃描線 {while(k1 < k && p[k1].x <= i) // 車更新 {updata(p[k1].y,p[k1].x,1);k1++;}while(k2 < q && s[k2].x2 <= i) // 矩形更新 {int minx = query(s[k2].y1,s[k2].y2,1);if (minx >= s[k2].x1 && minx <= s[k2].x2)protect[s[k2].id] = true;k2++;}}build_tree(1,1,max(n,m)+50); //reset_tree//翻轉for(int i = 0 ; i < k ; ++ i)swap(p[i].x ,p[i].y);for(int i = 0 ; i < q; ++ i){swap(s[i].x1,s[i].y1);swap(s[i].x2,s[i].y2);}sort(p,p+k);sort(s,s+q);k1 = k2 = 0;for(int i = 1 ; i <= m ; ++ i) //掃描線 {while(k1 < k && p[k1].x <= i) // 車更新 {updata(p[k1].y,p[k1].x,1);k1++;}while(k2 < q && s[k2].x2 <= i) // 矩形更新 {int minx = query(s[k2].y1,s[k2].y2,1);if (minx >= s[k2].x1 && minx <= s[k2].x2)protect[s[k2].id] = true;k2++;}}for(int i = 0 ; i < q ; ++ i)if (protect[i])printf("YES\n");elseprintf("NO\n");return 0; }

?

轉載于:https://www.cnblogs.com/Xiper/p/4470218.html

總結

以上是生活随笔為你收集整理的UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色网页免费 | 国产精品100 | 欧美日韩成人 | 欧美午夜激情影院 | 美女下部无遮挡 | 岳狂躁岳丰满少妇大叫 | 又大又粗又爽18禁免费看 | 久久精品黄 | 日本一区二区免费高清视频 | 欧美激情黑白配 | 国产超碰精品 | 亚洲天堂热 | 美女的诞生免费观看在线高清 | 亚洲视频国产精品 | 日本人体一区 | 亚洲一级视频在线观看 | 天天射网 | 欧美黄色小视频 | 九九亚洲精品 | www.97ai.com| 蜜乳av懂色av粉嫩av | 日韩中文在线字幕 | 色呦呦一区二区 | 欧美 日韩 国产 一区 | 精品国产亚洲一区二区麻豆 | 自偷自拍亚洲 | 九色porny自拍视频 | 中文字幕日韩精品在线观看 | 久久亚洲在线 | 国产69精品久久久久777 | 日韩欧美一区二区免费 | 网友自拍第一页 | 狠狠操在线观看 | 久久影视一区 | 后进极品白嫩翘臀在线视频 | 日韩电影中文字幕 | 男女猛烈无遮挡 | 天天舔天天 | 午夜激情综合 | 人人插人人搞 | 浓精喷进老师黑色丝袜在线观看 | 综合国产视频 | 免费在线观看毛片视频 | 九九少妇 | 亚洲精品视频免费观看 | 极品尤物一区二区 | 国产精品无码人妻一区二区在线 | www.爆操| 国产三级按摩推拿按摩 | 这里只有精品视频 | 亚洲视频黄 | 免费观看理伦片在线播放视频软件 | 亚洲国产一区二区三区在线观看 | 毛片一级片 | 拔萝卜91 | 狠狠干中文字幕 | 少妇精品久久久一区二区三区 | 永久在线观看 | 中文一区在线 | 一区二区不卡视频 | 成色视频 | 国产又粗又黄又爽视频 | 黄色网络在线观看 | 国产精品99精品 | 精品+无码+在线观看 | 免费又黄又爽又色的视频 | 久草美女| 性――交――性――乱睡觉 | 国产对白在线 | 饥渴的少妇和男按摩师 | 欧美色图中文字幕 | 蜜臀在线观看 | 欧美自拍色图 | 欧美视频成人 | 亚洲精选一区二区三区 | 国产成人午夜精华液 | 欧美中文字幕一区二区三区 | 91国产视频在线 | 又黄又爽的视频 | 欧美精品系列 | 亚洲人丰满奶水 | 日韩精品久久一区二区 | 欧美成人h版 | 超碰91在线| 亚洲精品国产精品国自产网站按摩 | 日本大胆欧美人术艺术 | 亚洲精品大片 | a级片黄色 | 免费a大片 | 人人妻人人澡人人爽久久av | 女人脱裤子让男人捅 | 国产福利免费观看 | 日韩三级中文字幕 | 日韩高清一级 | 精品人妻一区二区三区久久嗨 | 国产一级片在线 | 日日噜噜噜夜夜爽爽狠狠 | 国产成人一区二区三区小说 | 色呦呦一区二区 |