[决策单调性 分治 主席树] BZOJ 4367 [IOI2014]holiday假期
来源:互联网 发布:linux socket编程 pdf 编辑:程序博客网 时间:2024/05/14 13:20
比较显然的做法 枚举l,r 然后主席树
这题有很多单调性
可以利用
对一个确定的l 最优的r 是单调的 来分治
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){static char buf[100000],*p1=buf,*p2=buf;if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }return *p1++;}inline void read(int &x){char c=nc(),b=1;for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=100005;int root[N],ls[18*N],rs[18*N],cnt[18*N];ll sum[18*N];int ncnt;int sx[N],icnt;inline int Bin(int x){return lower_bound(sx+1,sx+icnt+1,x)-sx;}inline void update(int x){cnt[x]=cnt[ls[x]]+cnt[rs[x]];sum[x]=sum[ls[x]]+sum[rs[x]];}void Modify(int &y,int x,int l,int r,int t,int f){y=++ncnt; int mid=(l+r)>>1;if (l==r){cnt[y]=cnt[x]+f;sum[y]=sum[x]+f*sx[t];return;}if (t<=mid)rs[y]=rs[x],Modify(ls[y],ls[x],l,mid,t,f),update(y);elsels[y]=ls[x],Modify(rs[y],rs[x],mid+1,r,t,f),update(y);}inline ll Query(int y,int x,int k,int l,int r){if (l==r)return (ll)min(k,cnt[y])*sx[l];int tmp=cnt[rs[y]]-cnt[rs[x]],mid=(l+r)>>1;if (k<=tmp)return Query(rs[y],rs[x],k,mid+1,r);elsereturn sum[rs[y]]-sum[rs[x]]+Query(ls[y],ls[x],k-tmp,l,mid);}int n,st,d;int a[N];ll ans;void Solve(int l,int r,int s,int t){int mid=(s+t)>>1,mi=r,rest;ll best=0,tmp;for (int i=l;i<=r;i++){rest=(mid-i)+min(mid-st,st-i);rest=d-rest;if (rest>0){tmp=Query(root[mid],root[i-1],rest,1,icnt);if (tmp>best) best=tmp,mi=i;}}ans=max(ans,best);if (s<=mid-1) Solve(l,mi,s,mid-1);if (mid+1<=t) Solve(mi,r,mid+1,t);}int main(){ll tem;freopen("holiday.in","r",stdin);freopen("holiday.out","w",stdout);read(n); read(st); read(d); st++;for (int i=1;i<=n;i++)read(a[i]),sx[++icnt]=a[i];sort(sx+1,sx+icnt+1); icnt=unique(sx+1,sx+icnt+1)-sx-1;for (int i=1;i<=n;i++) a[i]=Bin(a[i]);for (int i=1;i<=n;i++)Modify(root[i],root[i-1],1,icnt,a[i],1);Solve(1,st,st,n);printf("%lld\n",ans);return 0;}
0 0
- [决策单调性 分治 主席树] BZOJ 4367 [IOI2014]holiday假期
- BZOJ 4367 [IOI2014]holiday假期 分治 主席树
- 【NOI2017模拟.4.1】Shoes【DP决策单调性,主席树,分治】
- 【IOI2014】【BZOJ4367】holiday假期
- [bzoj4367][IOI2014]holiday假期
- IOI2014 假期(Holiday)
- bzoj 2216: [Poi2011]Lightning Conductor 决策单调性+cdq分治
- bzoj 2369&2687: 区间 cdq分治+决策单调性
- [决策单调性 分治||单调栈 DP] BZOJ 2739 最远点
- BZOJ2216【决策单调性】
- Bzoj:[Poi2011]Lightning Conductor:决策单调性优化DP详解
- [BZOJ 2216][Poi2011]Lightning Conductor:DP决策单调性
- BZOJ 1563: [NOI2009]诗人小G 决策单调性DP
- BZOJ 2216: [Poi2011]Lightning Conductor 决策单调性DP
- BZOJ 4709: [Jsoi2011]柠檬 决策单调性 单调栈
- bzoj 2216: [Poi2011]Lightning Conductor(DP决策单调性)
- bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)
- bzoj 2216 [Poi2011]Lightning Conductor 决策单调性
- JavaScript 作用域 理解
- HTML5实例教程:OL标签的start属性和reversed属性
- easyUI——控制datagrid的显示与隐藏
- Android:30分钟弄明白Touch事件分发机制
- Android集成微信支付
- [决策单调性 分治 主席树] BZOJ 4367 [IOI2014]holiday假期
- Redis 基本命令备忘
- .net 反射实现两个相同结构实体类的转换
- Java线程的5种状态及切换
- C#中Main()和四种参数类型
- ld Memory exhausted一解
- zimbra安装
- easyui学习(1)
- PHP正则表达式学习笔记