小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的 货物,每取出一件货物后会 把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。         已知货物最初是按1~n 的顺序堆放的 ,每件货物的重量为w_i, 小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?-笔试面试资料

这是qklbishe.com第7189 篇笔试面试资料
提供答案分析,通过本文《       小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的 货物,每取出一件货物后会 把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。         已知货物最初是按1~n 的顺序堆放的 ,每件货物的重量为w_i, 小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

       小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中货物,每取出一件货物后把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。

       已知货物最初是按1~n的顺序堆放的每件货物的重量为w_i,小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?

         小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的 货物,每取出一件货物后会 把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。                  已知货物最初是按1~n 的顺序堆放的 ,每件货物的重量为w_i,  小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少? 我才不是游客
初始区间[1,n],拿出元素i,区间为[1,i-1],[i+1,n]。随着每次选择元素拿出,区间数量都会增加。
如何根据位置X快速找到需要分割的区间,这个可以用set来维护。
每次我们可以通过位置X,在set中找到右端点大于等于x的第一个区间,这个就是我们需要分割的区间。删除区间并插入两个分割区间。
第二点,如何找到区间和的最大值,同样的思路用一个multiset维护。当我们找到待分割区间后,根据区间和,在multiset中找到这个值,删除插入两个区间和。

#include <bits/stdc++.h> typedef long long ll; using namespace std; struct node {     int l,r;     bool operator<(const node Y)const     {         return r<Y.r;     } }; set<node>st; multiset<int>s; int n,a[50005],sum[50005]; int main() {     ios::sync_with_stdio(0),cin.tie(0);     int i,j,x;     cin>>n;     for(i=1; i<=n; i++)         cin>>a[i],sum[i]=sum[i-1]+a[i];     st.insert({1,n});     s.insert(sum[n]);     s.insert(0);     for(i=1; i<=n; i++)     {         cin>>x;         node t=*(st.lower_bound({x,x}));         int l=t.l,r=t.r;         st.erase(t);         if(l<x)             st.insert({l,x-1});         if(r>x)             st.insert({x+1,r});         multiset<int>::iterator it=s.lower_bound(sum[r]-sum[l-1]);         s.erase(it);         if(l<x)             s.insert(sum[x-1]-sum[l-1]);         if(r>x)             s.insert(sum[r]-sum[x]);         it=s.end();         it--;         cout<<*(it)<<endl;     }     return 0; } 

2021-03-04 20:43:30 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 »        小美是美团仓库的管理员,她会根据单据的要求按顺序取出仓库中的 货物,每取出一件货物后会 把剩余货物重新堆放,使得自己方便查找。已知货物入库的时候是按顺序堆放在一起的。如果小美取出其中一件货物,则会把货物所在的一堆物品以取出的货物为界分成两堆,这样可以保证货物局部的顺序不变。         已知货物最初是按1~n 的顺序堆放的 ,每件货物的重量为w_i, 小美会根据单据依次不放回的取出货物。请问根据上述操作,小美每取出一件货物之后,重量和最大的一堆货物重量是多少?-笔试面试资料

提供最优质的资源集合

立即查看 了解详情