日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩成人一区二区 | 国产91av在线 | 欧美一区二区三区免费在线观看 | 成人在线播放网站 | 日韩免费高清一区二区 | 亚欧三级| 欧美日韩一级大片 | 91尤物国产福利在线观看 | 亚洲一二三四视频 | 秋霞国产一区 | 操操操综合网 | 四虎影视在线播放 | 老女人性生活视频 | 国产在线高清视频 | 精品视频一区二区在线观看 | 日韩免费高清视频 | 韩日精品在线 | 亚洲1页 | 熟女性饥渴一区二区三区 | 91超碰在线免费观看 | 精品国产一区二区三区无码 | 中文字幕无码精品亚洲35 | 亚洲一区日韩精品 | 亚洲乱码一区二区 | 成人欧美一区二区三区在线观看 | 自拍超碰在线 | 91大神网址 | 美足av| 国产精彩视频一区 | 国产精品手机在线观看 | 荔枝视频污| 天天操,夜夜操 | 香蕉视频在线网站 | 麻豆视频黄色 | 欧美偷拍视频 | xx99小雪 | 久操热| 国产欧美日韩精品一区 | 人体内射精一区二区三区 | 丁香婷婷六月天 | 国内久久精品 | 艳母免费在线观看 | gav成人 | 日日摸夜夜添狠狠添久久精品成人 | 黄色av成人 | 日韩精品一区二区三区视频在线观看 | 观看av在线 | 久久99精品久久久久子伦 | 欧美在线视频第一页 | 久久久久亚洲AV成人网人人小说 | 少妇视频一区二区三区 | 一区影视 | 欧美一区二区三区的 | 麻豆婷婷 | 韩国精品久久久 | 国产中文字幕乱人伦在线观看 | 成人看| 丁香六月色婷婷 | 免费黄色在线播放 | 国产激情一区二区三区在线观看 | 性猛交xxxx乱大交孕妇2十 | 国产性猛交xxxⅹ交酡全过程 | 免费黄色网址视频 | 91a视频| eeuss一区二区 | 天天色天天综合 | 无码av免费毛片一区二区 | 97色综合 | 欧美激情3p| 亚洲精品国产精品国自产在线 | 国产一级片免费观看 | 国产在线毛片 | 爱爱免费网址 | 久久精品一区二区三区黑人印度 | 国产精品一区二区av白丝下载 | av一卡二卡 | 国产xxxxx在线观看 | 丁香六月婷婷激情 | 日韩手机在线观看 | 乱色专区 | 女同hd系列中文字幕 | 久久这里精品 | 日产国产亚洲精品系列 | 丁香激情婷婷 | 欧美一级影院 | 欧美日韩精品亚洲精品 | 夜夜综合网 | 国产aⅴ精品一区二区三区久久 | 东北少妇不带套对白 | 亚洲精品乱码久久久久久自慰 | 青青草华人在线 | 欧美xxx性 | 久久的色偷偷 | 国产真实乱人偷精品 | 无码无遮挡又大又爽又黄的视频 | 国产欧美视频在线播放 | 亚洲精品在线视频观看 | 人人射人人爽 | 久久成人黄色 |