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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

洛谷題目鏈接

題解

題目的數據范圍非常奇怪,一半是200?200200?200的矩陣,另一半是1?500001?50000的矩陣,顯然是一道二合一的題目,但是不一樣的地方也就在與數據結構的選擇不一樣,而我們解這道題使用的算法是一樣的,即都是二分法。

這道題所需要的數據結構應該能提供如下的功能:在O(1)O(1)O(logn)O(logn)的時間復雜度內查詢矩陣某區間內厚度大于xx的書本數,以及厚度大于xx的書的頁數總和。

根據上述數據結構的功能,我們可以設計一個二分算法。

即我們二分我們選取的書的最小厚度midmidcheckcheck時候就checkcheck一下矩陣內厚度mid≥mid的所有書的厚度之和是否能達到要求。
這樣的話,二分完之后,所有厚度大于ll的書的個數就是我們的答案!
錯!因為有可能厚度等于ll的書被多余使用了,因此,我們還要去掉一部分厚度為ll的書,使得總厚度仍然滿足要求,但是答案變小。

算法我們已經涉及完了。
現在我們想一下怎么樣設計數據結構:
當矩陣大小為200?200200?200的時候,我們定義val[i][j][k]val[i][j][k]表示矩陣區間[1,i][1,j][1,i][1,j]部分,厚度k≥k的書的總厚度,類似的定意num[i][j][k]num[i][j][k]表示個數。
這樣只需要dpdp一下就ok了。

當矩陣大小為1?5000001?500000的時候,涉及到區間操作,我們可以使用兩棵主席樹,一顆維護和,另一顆維護個數。

代碼

// luogu-judger-enable-o2 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define pr(x) cout<<#x<<":"<<x<<endl using namespace std; const int maxn = 500007; struct segtree{int root[maxn*20];int val[maxn*20];int lson[maxn*20];int rson[maxn*20];int id = 0;void init(){memset(root,0,sizeof(root));memset(val,0,sizeof(val));memset(lson,0,sizeof(lson));memset(rson,0,sizeof(rson));id = 0;}int ins(int &rt,int l,int r,int pos,int v){int nrt = ++id;lson[nrt] = lson[rt];rson[nrt] = rson[rt];val[nrt] = val[rt] + v;rt = nrt;if(l == r) return 0;int mid = (l+r)/2;if(pos <= mid) ins(lson[rt],l,mid,pos,v);else ins(rson[rt],mid+1,r,pos,v);}int query(int rt,int l,int r,int ul,int ur){if(!rt || ul > r || ur < l) return 0;if(ul <= l && r <= ur) return val[rt];int mid = (l+r)/2;int r1 = query(lson[rt],l,mid,ul,ur);int r2 = query(rson[rt],mid+1,r,ul,ur);return r1+r2;} }*seg,*segcnt; int R,C,M; int ck1(int mid,int y1,int y2){int sm = seg->query(seg->root[y2],1,1000,mid,1000);sm -= seg->query(seg->root[y1-1],1,1000,mid,1000);return sm; } void solve1(){seg = new segtree;segcnt = new segtree;seg->init();segcnt->init();for(int i = 1;i <= C;++i){int v;scanf("%d",&v);seg->root[i] = seg->root[i-1];segcnt->root[i] = segcnt->root[i-1];seg->ins(seg->root[i],1,1000,v,v);segcnt->ins(segcnt->root[i],1,1000,v,1);}for(int i = 1;i <= M;++i){int x1,y1,x2,y2,h;scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);int l = 1,r = 1000;while(l < r){int mid = (l+r+1) / 2;if(ck1(mid,y1,y2) >= h) l = mid;else r = mid-1;}if(ck1(l,y1,y2) < h) puts("Poor QLW");else {int ans = segcnt->query(segcnt->root[y2],1,1000,l,1000);ans -= segcnt->query(segcnt->root[y1-1],1,1000,l,1000);int delta = ck1(l,y1,y2) - h;ans -= delta / l;printf("%d\n",ans);}} } int (*val)[201][1001],(*vc)[201][1001]; int ck2(int va[201][201][1001],int mid,int x1,int y1,int x2,int y2){int ans = va[x2][y2][mid] + va[x1-1][y1-1][mid]- va[x2][y1-1][mid] - va[x1-1][y2][mid];return ans; } void solve2(){val = new int[201][201][1001];vc = new int[201][201][1001];memset(val,0,sizeof(val));memset(vc,0,sizeof(vc));for(int i = 1;i <= R;++i) for(int j = 1;j <= C;++j){int tmp;scanf("%d",&tmp);for(int k = 1;k <= 1000;++k){val[i][j][k] = val[i][j-1][k] + val[i-1][j][k]- val[i-1][j-1][k];vc[i][j][k] = vc[i][j-1][k] + vc[i-1][j][k] - vc[i-1][j-1][k];if(tmp >= k) val[i][j][k] += tmp,vc[i][j][k] ++; }}for(int i = 1;i <= M;++i){int x1,y1,x2,y2,h;scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&h);int l = 1,r = 1000;while(l < r){int mid = (l+r+1) / 2;if(ck2(val,mid,x1,y1,x2,y2) >= h) l = mid;else r = mid-1;}if(ck2(val,l,x1,y1,x2,y2) < h) puts("Poor QLW");else {int ans = ck2(vc,l,x1,y1,x2,y2);int delta = (ck2(val,l,x1,y1,x2,y2)-h)/l;ans -= delta;printf("%d\n",ans);}} }int main() {cin>>R>>C>>M;if(R == 1) solve1();else solve2();return 0; }

總結

以上是生活随笔為你收集整理的P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: av女人的天堂 | 少妇无码av无码专区在线观看 | 九九热视频在线 | 日本在线一区二区 | 青青草视频在线观看免费 | 欧美精品自拍视频 | 桃花久久 | 黄色日韩 | 污污的网站在线免费观看 | 欧美一性一乱一交一视频 | 亚洲蜜桃在线 | mm1313亚洲国产精品无码试看 | 亚洲 欧美 精品 | 熟女熟妇伦久久影院毛片一区二区 | 日韩视频成人 | 九九影院最新理论片 | av资源在线免费观看 | 精品国产一区二区三区日日嗨 | 成人影音在线 | 国产精选视频在线观看 | 欧美黄页在线观看 | 日韩黄色网 | 日韩专区av | 日日撸夜夜撸 | 羞羞软件| 日本熟女毛茸茸 | 国产aa视频 | 亚洲一区二区三区电影在线观看 | 国产香蕉一区 | 18视频在线观看男男 | 国产成人无码一区二区三区在线 | 一级黄色性生活视频 | 最新最近中文字幕 | 香蕉手机网 | 亚洲天堂2021av| 日韩在线一区二区 | 欧美丰满熟妇bbbbbb | 日韩中文字幕在线一区 | 色综网 | 久久精品国产精品亚洲色婷婷 | 天天夜夜骑| 日操操 | 狠狠干2020| 性感少妇在线观看 | 波多野吉衣一二三区乱码 | 黑帮大佬和我的365日第二部 | 国产免费黄色av | 日韩三级一区 | 免费性情网站 | 不卡中文字幕在线观看 | 色涩色| 亚洲av无码国产精品久久不卡 | 久久国产精 | 成人h片| 开心色站| 免费又黄又爽又色的视频 | 国产九色91 | 精品国产乱码久久久久夜深人妻 | 高h放荡受浪受bl | 91一区在线 | 久久66热这里只有精品 | 美女国产视频 | 日韩一区二区影视 | 91成人免费网站 | 亚洲精华国产精华精华液网站 | 丁香花电影在线观看免费高清 | 95看片淫黄大片一级 | 一区二区免费播放 | 日本孰妇毛茸茸xxxx | 永久免费,视频 | 亚洲蜜桃视频 | 青青草免费在线 | 日韩网站视频 | 国产精品一区二区三区四区五区 | 操模特 | 国产成人无遮挡在线视频 | 国产aaa大片 | 97夜夜操| 在线观看高h| 天天操天天射天天舔 | 日日天天 | 欧美日韩蜜桃 | 日本女人hd | 男女插插网站 | 国产福利精品视频 | 波多野结衣不卡视频 | 久久激情综合 | 国内毛片毛片毛片 | 伊人99| 九九九九色 | 香蕉视频网页版 | 18色av| 自拍偷拍小视频 | 男人和女人日批 | 四虎影视成人永久免费观看亚洲欧美 | 日韩亚洲一区二区三区 | 中文字幕 日本 | 青青草自拍视频 | 三级理伦|