博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 6444 Neko's loop 线段树区间更新
阅读量:4984 次
发布时间:2019-06-12

本文共 2173 字,大约阅读时间需要 7 分钟。

题目连接:

题意:给一个长度为n的环,下标从0~n-1,环上每个点有个值表示到这个点会得到的快乐值。,然后每次可以花费1能量往后跳k步。你可以选择任意点开始跳,可以任意点结束,最多跳m次问得到至少s的快乐值最初要拥有多少。

题解:先把循环节挑出来,,然后在循环节上找最大字段和。循环节长度为cnt,然后就是枚举起点用线段树维护前缀和,然后取最大值。

#include
#define ls l,m,rt<<1#define rs m+1,r,rt<<1|1#define ll long longusing namespace std;const int N=1e4+5;int n,m,k;ll ans,s;bool vis[N];int a[N];int b[N*3];ll tr[3*N<<2],laz[3*N<<2];void built(int l,int r,int rt){ tr[rt]=laz[rt]=0; if(l==r)return ; int m=l+r>>1; built(ls);built(rs);}void push_down(int rt){ if(!laz[rt])return ; laz[rt<<1]+=laz[rt]; laz[rt<<1|1]+=laz[rt]; tr[rt<<1]+=laz[rt]; tr[rt<<1|1]+=laz[rt]; laz[rt]=0;}void push_up(int rt){ tr[rt]=max(tr[rt<<1],tr[rt<<1|1]);}void update(int L,int R,int val,int l,int r,int rt){ if(L<=l&&r<=R) { laz[rt]+=val; tr[rt]+=val;return; } push_down(rt); int m=l+r>>1; if(L<=m)update(L,R,val,ls); if(R>m)update(L,R,val,rs); push_up(rt);}ll query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { return tr[rt]; } push_down(rt); int m=l+r>>1; ll ans=-1e18; if(L<=m)ans=max(ans,query(L,R,ls)); if(R>m)ans=max(ans,query(L,R,rs)); return ans;}ll slo(int x){ int tt =x; int cnt=0; while(vis[tt]==false){ vis[tt] = true; b[++cnt] = a[tt]; tt = (tt+k)%n; //cout << tt << ' '<<(tt+k)%n<<' '<< a[tt] << endl; } ll sum=0; for(int i=1;i<=cnt;i++) { sum+=b[i]; b[cnt+i]=b[cnt*2+i]=b[i]; } int len=m%cnt; int mm = m; if(m/cnt) len += cnt,mm-=cnt; ll an=-1e18; built(1,cnt*3,1); for(int i=3*cnt;i>=1;i--) { int r=min(i+len-1,3*cnt); update(i,r,b[i],1,3*cnt,1); an=max(an,query(i,r,1,3*cnt,1)); //cout <
<< ' '<
<< ' '<
<< endl; } return sum>0?an+mm/cnt*sum:an;}int main(){ int T,cas=0; scanf("%d",&T); while(T--) { memset(vis,false,sizeof(vis)); ans=-1e18; scanf("%d %lld %d %d",&n,&s,&m,&k); for(int i=0;i
=s?0:s-ans)); } return 0;}

 

转载于:https://www.cnblogs.com/lhclqslove/p/9542552.html

你可能感兴趣的文章
Python3 中 configparser 模块解析配置的用法详解
查看>>
新手android环境搭建、debug调试及各种插件安装__图文全解
查看>>
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 win2008R2 X64 IIS7.5
查看>>
Diffuse贴图+Lightmap+Ambient
查看>>
矩阵树定理
查看>>
[算法]Evaluate Reverse Polish Notation
查看>>
go语言之进阶篇接口的定义和实现以及接口的继承
查看>>
SmartPhone手机网站的制作
查看>>
自适应全屏与居中算法
查看>>
构建之法阅读笔记(一)
查看>>
帮助你设计的50个自由和新鲜的图标集
查看>>
Glusterfs[转]
查看>>
javascript缩写
查看>>
GA来源分析
查看>>
常用统计指标
查看>>
iOS设置圆角矩形和阴影效果
查看>>
在博客园的第一篇文章,先简单自述一下吧
查看>>
深入了解 Dojo 的服务器推送技术
查看>>
hdu 4284 状态压缩
查看>>
逆向分析技术
查看>>