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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CodeForces - 1208E Let Them Slide(模拟+multiset)

發(fā)布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1208E Let Them Slide(模拟+multiset) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出n個數(shù)列,每行放一個,現(xiàn)在指定一個寬度w,滿足w不小于n個數(shù)列中最長的那個數(shù)列的長度,現(xiàn)在可以將n個數(shù)列都放入到一個n*w的矩形之中,每個數(shù)列可以在各自的行內(nèi)左右移動,現(xiàn)在問對于每一列i,求出權(quán)值和的最大值,注意,若一個數(shù)列的長度小于w,那么其余的位置都用0補齊

題目分析:題目還是比較好懂的,因為給出的圖片以及樣例算是比較友好的了,看看圖片就知道答案是怎么來的了。。讀懂題目之后相當于一個中等難度偏下的模擬,我們只需要照做就好了

具體實現(xiàn)方法就是在輸入的時候,對于每個數(shù)字當前的位置記錄一下可貢獻的區(qū)間,也就是通過移動可到達的最左和最后的位置,最左邊的答案用in數(shù)組儲存,最右邊的答案用out數(shù)組儲存,記錄好后開始模擬,我們可以使用一個優(yōu)先隊列獲得區(qū)間中的最大值,最外層的for枚舉的是1~w的列的下標,內(nèi)層for枚舉的是1~n的行的下標,每次更新時將in數(shù)組內(nèi)的數(shù)扔進去,將out數(shù)組內(nèi)的數(shù)刪掉,之后就可以直接得到答案了

不過上述方法的時間復(fù)雜度是n*w*logw級別的,在這個題目中是不可行的,所以我們必須想辦法優(yōu)化一下,而且在優(yōu)先隊列中也不支持隨機訪問和隨機刪除,所以我們可以用multiset來代替優(yōu)先隊列,每次插入也是logn級別的,而且可以支持find函數(shù)查找某個值的位置,以及搭配erase函數(shù)刪除掉某個特定的值,剛好滿足上面的操作了

至于優(yōu)化的話,我們其實每次不必枚舉到1~n,因為1~n的每一行在特定的第i列下,絕大部分都是對答案沒有貢獻的,也就是in數(shù)組和out數(shù)組在當前列的貢獻為0,這樣的話我們就可以將in和out數(shù)組的下標用列來表示,并將其設(shè)置為vector容器,這樣就能每次只需要遍歷in[i].size()+out[i].size()個變量了,從O(n)下降到了O(in[i].size()+out[i].size())了,因為題目保證了數(shù)組的總長度小于等于1e6,所以我們就完美的將n*w*logw的時間復(fù)雜度下降到了w*logw了,也就可以解決這個問題了

這個題目主要還是練習了multiset的使用吧,有一說一,確實蠻好用的,關(guān)于multiset我們需要注意一下,若我們要取得最后那個數(shù),應(yīng)該調(diào)用rbegin()而不是end()函數(shù),因為end函數(shù)返回的是超尾,如果實在想用end的話可以改成end()-1,所以我們還是直接用rbegin()調(diào)用最后一個元素就好了

代碼:

#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;struct Node {int val,pos;Node(int VAL,int POS){val=VAL;pos=POS;} };//保存權(quán)值和位置(行)multiset<LL>st[N];//st[行]vector<Node>in[N],out[N];//in[列] out[列]LL ans[N];//ans[列]int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n,w;scanf("%d%d",&n,&w);for(int i=1;i<=n;i++){int len;scanf("%d",&len);if(len<w)//空白地方可以補0 {in[1].push_back(Node(0,i));out[w-len].push_back(Node(0,i));in[len+1].push_back(Node(0,i));out[w].push_back(Node(0,i));}for(int j=1;j<=len;j++)//維護in數(shù)組和out數(shù)組{int num;scanf("%d",&num);in[j].push_back(Node(num,i));out[w-len+j].push_back(Node(num,i));}}for(int i=1;i<=w;i++)//枚舉列數(shù) st[行數(shù)]{ans[i]=ans[i-1];//因為每次答案可以在前置答案的基礎(chǔ)上操作,避免了多余的操作for(int j=0;j<in[i].size();j++)//枚舉行數(shù) ans[列數(shù)]{int pos=in[i][j].pos;//行 int val=in[i][j].val;//值 if(st[pos].size())//如果存在區(qū)間最大值,則減去ans[i]-=*st[pos].rbegin();st[pos].insert(val);//更新區(qū)間最大值(插入一個值)ans[i]+=*st[pos].rbegin();//再加上區(qū)間最大值}for(int j=0;j<out[i-1].size();j++)//注意這里要用out[i-1]來維護ans[i]{int pos=out[i-1][j].pos;//行 int val=out[i-1][j].val;//值 ans[i]-=*st[pos].rbegin();//因為每個out前面必定對應(yīng)著一個in,所以必定存在區(qū)間最大值,直接減去st[pos].erase(st[pos].find(val));//更新區(qū)間最大值(刪除一個值)if(st[pos].size())//如果刪除后還存在區(qū)間最大值的話,直接加上ans[i]+=*st[pos].rbegin();}}for(int i=1;i<=w;i++)printf("%lld ",ans[i]);return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的CodeForces - 1208E Let Them Slide(模拟+multiset)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本色道久久88综合日韩精品 | 日日夜夜人人 | 91视频黄色 | 奇米精品一区二区三区在线观看 | 欧美日韩免费在线视频 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 小日子的在线观看免费第8集 | 日韩成人一区二区三区 | 欧洲精品久久 | 黄av在线| 成人无码av片在线观看 | 精品无码av在线 | 高清不卡一区二区 | 在线观看入口 | 最新久久久 | 无码人妻丰满熟妇区毛片18 | 欧美精品色 | 欧美激情片在线观看 | 日韩中文欧美 | 中文字幕不卡一区 | 国产精品aⅴ | 成人做爰www看视频软件 | 少妇熟女一区 | 一区二区三区不卡在线观看 | 青娱乐国产在线 | 久操色| 小宵虎南在线观看 | 日韩无遮挡 | va视频在线观看 | 久久精品电影网 | 久久久涩 | 嫩草视频91 | 亚洲二区在线播放视频 | 亚洲av无一区二区三区怡春院 | 91亚洲一区二区三区 | 韩国视频一区二区 | 亚洲综合在线第一页 | 日韩免费在线观看视频 | 国产成人在线免费观看视频 | 91免费高清 | 国产三级网 | 精品伦精品一区二区三区视频密桃 | 亚洲巨乳在线 | 成年人黄色网址 | 91chinese在线| 国产二区在线播放 | 看免费毛片| 淫人网| 亚洲成人精品在线播放 | jizz欧美| 精品1卡二卡三卡四卡老狼 日韩三级网 | 九九精品在线播放 | 成人小说亚洲一区二区三区 | 又紧又大又爽精品一区二区 | 亚洲五月激情 | 亚洲国产剧情在线观看 | 献给魔王伊伏洛基亚吧动漫在线观看 | 一级片在线播放 | 国产成人在线播放视频 | 成人亚洲视频 | 国内性视频 | 国产精品一区二区三区免费在线观看 | 亚洲国产天堂 | 欧美自拍区 | 一女被多男玩喷潮视频 | 欧美视频亚洲 | 四虎在线免费 | 中文字幕在线观看免费 | 黄色网页免费 | 影音先锋国产在线 | 无码人妻精品一区二区蜜桃网站 | 欧美黄页网站 | 久久精品亚洲精品国产欧美 | 人人玩人人弄 | 中日韩精品在线 | 日韩视频久久 | 黄视频在线免费看 | 91精品国产99久久久久久 | 美女黄色片网站 | 神秘马戏团在线观看免费高清中文 | 亚洲在线一区 | 亚洲五月六月 | 网友自拍一区 | 中文字幕av久久爽 | 男阳茎进女阳道视频大全 | 四川话毛片少妇免费看 | 日韩成人av一区 | 国产调教| 成人国产a| 草色网 | 一区二区三区蜜桃 | 三级欧美日韩 | 精品蜜桃av | 久草视频免费看 | 免费精品视频在线观看 | 深夜网站在线 | 亚洲国产色图 | 大尺度做爰呻吟舌吻网站 | 久久国产日韩 |