正题

题目链接:https://www.luogu.org/problem/P3470


题目大意

一个+−+-+−序列,+++表示111,−-−表示−1-1−1。sis_isi​表示到第iii个的前缀和,要求
q+sn=p且q+si≥0(i∈[1..n])q+s_n=p且q+s_i\geq 0(i\in[1..n])q+sn​=p且q+si​≥0(i∈[1..n])

然后有以下操作

  1. 消耗xxx将一位取反
  2. 消耗yyy将最后一位丢到最前面

求最小消耗


解题思路

先不考虑操作2
若已经满足了q+sn=pq+s_n=pq+sn​=p,那么答案显然为max{−q−si,0}∗2∗xmax\{-q-s_i,0\}*2*xmax{−q−si​,0}∗2∗x
然后我们考虑那若不同呢,我们考虑将两个可以合并在一起计算
答案就是(max{−q−si,0}2+∣max{−q−si,0}−(q−p+sn)2∣)∗x(\frac{max\{-q-s_i,0\}}{2}+|\frac{max\{-q-s_i,0\}-(q-p+s_n)}{2}|)*x(2max{−q−si​,0}​+∣2max{−q−si​,0}−(q−p+sn​)​∣)∗x

上的都可以O(1)O(1)O(1)的时间内计算,所以我们暴力枚举转了多少次

这里的max{−q−si,0}max\{-q-s_i,0\}max{−q−si​,0}我是用线段树进行维护的,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+100;
struct Tree_node{int l,r,w,lazy;
};
int n,p,q,x,y,s[N],k,z,ans;
char a[N];
struct Seg_Tree{Tree_node t[N*4];void Build(int x,int l,int r){t[x].l=l;t[x].r=r;if(l==r){t[x].w=s[l];return;}int mid=(l+r)/2;Build(x*2,l,mid);Build(x*2+1,mid+1,r);t[x].w=max(t[x*2].w,t[x*2+1].w);}void DownData(int x){if(!t[x].lazy) return;t[x*2].lazy+=t[x].lazy;t[x*2+1].lazy+=t[x].lazy;t[x*2].w+=t[x].lazy;t[x*2+1].w+=t[x].lazy;t[x].lazy=0;return;}void Change(int x,int l,int r,int val){if(t[x].l==l&&t[x].r==r){t[x].w+=val;t[x].lazy+=val;return;}DownData(x);int mid=(t[x].l+t[x].r)/2;if(r<=mid) Change(x*2,l,r,val);else if(l>mid) Change(x*2+1,l,r,val);else Change(x*2,l,mid,val),Change(x*2+1,mid+1,r,val);}
}Tree;
int main()
{freopen("data.in","r",stdin);freopen("data.out","w",stdout);scanf("%d%d%d%d%d",&n,&p,&q,&x,&y);scanf("%s",a+1);n=strlen(a+1);for(int i=1;i<=n;i++)s[i]=s[i-1]+(a[i]=='+'?-1:1);Tree.Build(1,1,n);k=(q-p+s[n])/2;ans=2e9;for(int i=0;i<n;i++){if(i*y>ans) break;if(k>=0) ans=min(ans,i*y+max(Tree.t[1].w-p-k*2,0)*2*x+abs(k)*x);else ans=min(ans,i*y+max(Tree.t[1].w-p,0)*2*x+max(abs(k)-max(Tree.t[1].w-p,0),0)*x);Tree.Change(1,n-i,n-i,-s[n-i]-z);Tree.Change(1,1,n,(a[n-i]=='+'?-1:1));z+=(a[n-i]=='+'?-1:1);}printf("%d",ans);
}

P3470 [POI2008]BBB-BBB【线段树,贪心】相关推荐

  1. HDU 2795 Billboard (线段树+贪心)

    HDU 2795 Billboard (线段树+贪心) 手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/articl ...

  2. 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

    传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码 转载于: ...

  3. BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...

  4. IOI 2007 Sail (线段树+贪心)

    题意: 有一艘船,船上有 \(n\) 个旗杆,每个旗杆上有 \(h_i\) 个小节.每根旗杆上会挂 \(k_i\) 张帆 每个小节最多挂一个帆.在风中,帆的不同排布方式会产生不同的推动力 对于任意一张 ...

  5. 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)

    我不会做贪心题啊--贪心题啊--题啊--啊-- 我真TM菜爆了啊-- 这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序.然后维护一个查询最大值的线段树.对于一个区间[l,r],如果这个区间已 ...

  6. Contest1802 - 2019年第二阶段我要变强个人训练赛第十八场 问题 N: 扶桑号战列舰 线段树+贪心

    题目链接:http://icpc.upc.edu.cn/problem.php?cid=1802&pid=13 问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB   ...

  7. 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 339  Solved: 130 [Submit][Status][Discuss] ...

  8. Hdu 5338 ZZX and Permutations(线段树+贪心)

    解析: 首先用set维护被Cirlcle Notation切开的不连续的各个段. 然后从i开始,(p[i]为i的位置) 找到其在set中的左右端点,左边的最大值为value_l,右边p[i]+1的值为 ...

  9. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

最新文章

  1. 信捷伺服刚性调整_伺服系统增益协调的作用及举例说明,文末有伺服产品调试学习PPT!...
  2. 疾控中心计算机管理员权限,疾控中心健康证分权限管理系统使用说明
  3. ARKit从入门到精通(6)-ARSession介绍
  4. 升级鸿蒙系统照片,华为鸿蒙系统照片出炉,神似EMUI,海内外花粉沸腾了
  5. .NET Core TDD前传: 编写易于测试的代码 -- 缝
  6. 查找满足断言的第一个元素
  7. “” '' ``区别 初学者自用
  8. 7 centos 设置jvmgc_centos下docker离线部署
  9. kafka 的pom文件_基于SparkStreaming+Kafka+HBase实时点击流案例
  10. 为什么我们应该使用 Flutter?
  11. halcon学习笔记——图像的预处理
  12. 步进电机 高速光耦_高速光耦有哪些_高速光耦如何选型 - 全文
  13. 苹果笔记本的end键_苹果电脑键盘快捷键使用技巧
  14. 基于Transformer的NLP智能对话机器人实战课程培训
  15. 拼音检索VS五笔检索---Javascript实现
  16. 最新最全的免费股票数据接口--沪深A股深度分析财务分析数据API接口(十一)
  17. 写个脚本批量注册网站账号
  18. python统计水仙花数个数_Python一句代码实现找出所有水仙花数的方法
  19. R语言 编写自定义函数
  20. 00后步入社会,有哪些适合你的创业项目?

热门文章

  1. 独立主题需要有index.php模板文件,wordpress 主题模板文件列表及其作用
  2. c语言程序设计稀土,稀土掺杂Tarkall-C合金多尺度设计及计算
  3. 简单计算机面试题库及答案_计算机专业复试面试问题含答案
  4. 华为机试支持python吗_4.10华为暑期实习生机试题目,python解答
  5. .net html5页面缓存,详解HTML5中的manifest缓存使用
  6. linux中wine yum安装,分享|在基于RedHat或Debian的系统上安装 Wine 1.7
  7. ibm台式计算机不能自动关机,IBM X3650 M3 不定时自动关机求大神
  8. activex java 控件_java 如何调用ActiveX控件??
  9. leetcode131. 分割回文串
  10. 什么事计算机事实性知识,《人工智能》复习要点