JZOJ 5409 【NOIP2017提高A组集训10.21】Fantasy
来源:互联网 发布:投诉淘宝卖家电话 编辑:程序博客网 时间:2024/05/29 11:21
Fantasy
Description
给出一个长度为
对于这个序列的每一个子串,定义其价值为这个子串的和。
问选择
其中题目有一个特殊限制,选择出来的这些子串的长度必须在
Data Constraint
Solution
方法一:
求出序列的前缀和
用
用一个三元组(
将这样(
执行下列操作
这个算法的缺点在于它的复杂度与
方法二:
二分第
对于单次的二分的时间复杂度是
Code of Solution 1
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<set>#include<cmath>#define fo(i,j,l) for(int i=j;i<=l;i++)#define fd(i,j,l) for(int i=j;i>=l;i--)using namespace std;typedef long long ll;const ll N=11e4,M=21;struct note{ll s,k,t,l,r;};struct myComp { bool operator()(note a,note b) { return a.s!=b.s ? a.s>b.s : (a.k!=b.k ? a.k<b.k : a.t<b.t) ; } };set<note,myComp> op;int n,m,j,k,l,i,le,ri;ll a[N],q[N];ll f[N][M],m2[M],fl[2*N];int min(ll a,ll b){if(a<b)return a;else return b;}note merge(int o,int l,int r){ int yy=fl[r-l+1]; note u; u.k=o; u.l=l; u.r=r; if(q[f[u.l][yy]]>=q[f[u.r-m2[yy]+1][yy]])u.t=f[u.l][yy]; else u.t=f[u.r-m2[yy]+1][yy]; u.s=q[u.t]-q[o]; return u;}void read(ll &o){ o=0; char ch=' '; for(;(ch<'0'||ch>'9')&&(ch!='-');)ch=getchar(); ll u=1; if(ch=='-')u=-1,ch=getchar(); for(;ch>='0'&&ch<='9';ch=getchar())o=o*10+ch-48; o*=u;}int main(){ freopen("fantasy.in","r",stdin); freopen("fantasy.out","w",stdout); cin>>n>>k>>le>>ri; m2[0]=1; fo(i,1,18)m2[i]=m2[i-1]*2; for(int i=0;m2[i]<=n;i++) fo(l,m2[i],m2[i+1]-1) fl[l]=i; fl[1]=0; q[0]=a[0]=0; fo(i,1,n)read(a[i]),q[i]=q[i-1]+a[i]; int y=fl[n]; fo(i,1,n)f[i][0]=i; fo(i,1,y) fo(l,1,n-m2[i]+1) if(q[f[l][i-1]]<=q[f[l+m2[i-1]][i-1]])f[l][i]=f[l+m2[i-1]][i-1]; else f[l][i]=f[l][i-1]; fo(i,1,n-le+1)op.insert(merge(i-1,i+le-1,min(n,i+ri-1))); ll ans=0; fo(i,1,k){ note u=*op.begin(); ans+=u.s; int z1=u.l,z2=u.t-1,y1=u.t+1,y2=u.r; op.erase(op.begin()); if(z1<=z2)op.insert(merge(u.k,z1,z2)); if(y1<=y2)op.insert(merge(u.k,y1,y2)); } printf("%lld\n",ans);}
阅读全文
1 0
- 【JZOJ 5409】【NOIP2017提高A组集训10.21】Fantasy
- JZOJ 5409 【NOIP2017提高A组集训10.21】Fantasy
- JZOJ 5409【NOIP2017提高A组集训10.21】Fantasy(主席树版)
- 【NOIP2017提高A组集训10.21】Fantasy
- 【NOIP2017提高A组集训10.21】Fantasy
- [JZOJ5439]【NOIP2017提高A组集训10.21】Fantasy
- JZOJ5409. 【NOIP2017提高A组集训10.21】Fantasy
- JZOJ 5407. 【NOIP2017提高A组集训10.21】Deep
- JZOJ 5408. 【NOIP2017提高A组集训10.21】Dark
- JZOJ 5407. 【NOIP2017提高A组集训10.21】Deep
- JZOJ 5408 【NOIP2017提高A组集训10.21】Dark
- JZOJ 5432. 【NOIP2017提高A组集训10.28】三元组
- 【JZOJ 5432】【NOIP2017提高A组集训10.28】三元组
- JZOJ 5410. 【NOIP2017提高A组集训10.22】小型耀斑
- 【JZOJ 5410】【NOIP2017提高A组集训10.22】小型耀斑
- 【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
- JZOJ 5414. 【NOIP2017提高A组集训10.22】幸运值
- 【JZOJ 5414】【NOIP2017提高A组集训10.22】幸运值
- 智能小车42:openwrt的系统配置与gpio操作
- 【12345】输出54321
- 金字塔原理——表达的逻辑(笔记)
- JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
- 文章标题
- JZOJ 5409 【NOIP2017提高A组集训10.21】Fantasy
- 【Lucas定理+高维前缀和】2017.10.26杂题[虚妄之诺]题解
- 一个考验c语言和数据结构功底的小项目
- 三级联动
- Nico的任务
- [bzoj1975][Sdoi2010]魔法猪学院 k短路 dijkstra
- 读人人都是产品经理对产品经理的粗浅认识
- 数据蒋堂 | 非常规聚合
- 面试题