国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BZOJ2802: [Poi2012]Warehouse Store

2019-11-06 06:25:49
字體:
來源:轉載
供稿:網友

很經典的貪心,有兩種做法 1:我的做法,按需求從小到大排序,寫一棵線段樹,對于每個判這一天是否能取,易證這樣取一定是最優的 2:經典做法?直接按天數處理,維護一個大根堆,如果當前這一天不能滿足顧客要求,若大根堆堆頂比當前要求大,就把堆頂pop出,把這一天的放進去

code:

#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long long#define lowbit(x) x&(-x)using namespace std;void read(int &x){ char c; while(!((c=getchar())>='0'&&c<='9')); x=c-'0'; while((c=getchar())>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0';}const int maxn = 260000;struct node{ int x,i; node(){} node(int _x,int _i){x=_x;i=_i;}}a[maxn]; int n;bool cmp(node x,node y) {return x.x<y.x;}ll v[maxn];struct tree{ ll c,flag;}tr[maxn<<2];void pushup(int x){ int lc=x<<1,rc=lc|1; tr[x].c=min(tr[lc].c,tr[rc].c);}void pushdown(int x){ if(!tr[x].flag) return ; int lc=x<<1,rc=lc|1; tr[lc].flag+=tr[x].flag; tr[lc].c-=tr[x].flag; tr[rc].flag+=tr[x].flag; tr[rc].c-=tr[x].flag; tr[x].flag=0;}void build_tree(int x,int l,int r){ if(l==r){ tr[x].c=v[l]; return ; } int mid=(l+r)>>1,lc=x<<1,rc=lc|1; build_tree(lc,l,mid); build_tree(rc,mid+1,r); pushup(x);}void change(int x,int l,int r,int lx,int rx,ll c){ if(lx<=l&&r<=rx) { tr[x].c-=c; tr[x].flag+=c; return ; } int mid=(l+r)>>1,lc=x<<1,rc=lc|1; pushdown(x); if(rx<=mid) change(lc,l,mid,lx,rx,c); else if(lx>mid) change(rc,mid+1,r,lx,rx,c); else change(lc,l,mid,lx,mid,c),change(rc,mid+1,r,mid+1,rx,c); pushup(x);}ll query(int x,int l,int r,int lx,int rx){ if(lx<=l&&r<=rx) return tr[x].c; pushdown(x); int mid=(l+r)>>1,lc=x<<1,rc=lc|1; if(rx<=mid) return query(lc,l,mid,lx,rx); else if(lx>mid) return query(rc,mid+1,r,lx,rx); else return min(query(lc,l,mid,lx,mid),query(rc,mid+1,r,mid+1,rx));}int ans[maxn];int main(){ read(n); for(int i=1;i<=n;i++) { int x; read(x); v[i]=v[i-1]+x; } build_tree(1,1,n); for(int i=1;i<=n;i++) { int x; read(x); a[i]=node(x,i); } sort(a+1,a+n+1,cmp); int an=0; for(int i=1;i<=n;i++) { ll k=query(1,1,n,a[i].i,n); if(k>=a[i].x) ans[++an]=a[i].i,change(1,1,n,a[i].i,n,a[i].x); } sort(ans+1,ans+an+1);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 探索| 遵义市| 定结县| 平昌县| 克什克腾旗| 独山县| 陇川县| 雷州市| 和政县| 休宁县| 澄迈县| 洪雅县| 漯河市| 墨玉县| 轮台县| 余庆县| 淳安县| 宁蒗| 石屏县| 娄底市| 宝山区| 宕昌县| 瑞昌市| 犍为县| 察哈| 辽中县| 沈丘县| 凌源市| 无棣县| 岳阳县| 潜江市| 淮北市| 开平市| 灌南县| 梅河口市| 繁峙县| 宿松县| 宜都市| 祁阳县| 灵山县| 夹江县|