CF1556E-Equilibrium【栈,树状数组】
正题
题目连接:https://codeforces.com/contest/1556/problem/E
题目大意
两个长度为nnn的序列a,ba,ba,b,qqq次询问一个区间[l,r][l,r][l,r]。
在这个区间中你每次可以选择一个长度为偶数的下标递增的序列,让奇数位置的aaa加一,偶数位置的bbb加111。
求最少操作次数使得每个ai=bia_i=b_iai=bi。
n,q≤105n,q\leq 10^5n,q≤105
解题思路
视为一个减一个加的话,令xi=bi−aix_i=b_i-a_ixi=bi−ai这样就变成了每个需要加/减的次数。
可以视为每个减后面需要跟一个加,加前面需要跟一个减,而加后面可以免费跟一个减。
把需要减的看成(((,需要加的看成)))的话就能看出来无论什么区间的情况下每个(((都是和同一个)))匹配或者无法匹配。
离线询问,开两个栈分别存(((和))),然后一个树状数组用来记录每个位置需要的左端点位置上限,另一个记录每个左端点对应的权值即可。
时间复杂度O(nlogn+qlogn)O(n\log n+q\log n)O(nlogn+qlogn)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
#define lowbit(x) (x&-x)
using namespace std;
const ll N=1e5+10;
struct node{ll l,r,id;
}q[N];
ll n,m,a[N],c[N],d[N],t[N],s[N],ans[N];
stack<int> S,T;
void Change(ll x,ll val){x=n-x+1;while(x<=n){t[x]+=val;x+=lowbit(x);}return;
}
ll Ask(ll x){ll ans=0;x=n-x+1;while(x){ans+=t[x];x-=lowbit(x);}return ans;
}
void Dhange(ll x,ll val){x=n-x+1;while(x<=n){s[x]=min(s[x],val);x+=lowbit(x);}return;
}
ll Bsk(ll x){ll ans=n+1;x=n-x+1;while(x){ans=min(ans,s[x]);x-=lowbit(x);}return ans;
}
bool cmp(node x,node y)
{return x.r<y.r;}
signed main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);for(ll i=1,x;i<=n;i++)scanf("%lld",&x),a[i]=x-a[i];for(ll i=1;i<=m;i++)scanf("%lld%lld",&q[i].l,&q[i].r),q[i].id=i;sort(q+1,q+1+m,cmp);memset(s,0x3f,sizeof(s));c[0]=1e18;S.push(0);for(ll i=1,z=1;i<=n;i++){if(a[i]>0){ll x=a[i];Change(i,x);while(!T.empty()&&d[T.top()]<x)x-=d[T.top()],Change(T.top(),-d[T.top()]),T.pop();if(!T.empty())d[T.top()]-=x,Change(T.top(),-x);S.push(i);c[i]=a[i];}if(a[i]<0){ll x=-a[i];while(c[S.top()]<x)x-=c[S.top()],S.pop();c[S.top()]-=x;Dhange(i,S.top());if(c[S.top()]==0)S.pop();T.push(i);d[i]=-a[i];}while(z<=m&&q[z].r==i){if(q[z].l<=S.top()||q[z].l>Bsk(q[z].l))ans[q[z].id]=-1;else ans[q[z].id]=Ask(q[z].l);z++;}if(z>m)break;}for(ll i=1;i<=m;i++)printf("%lld\n",ans[i]);return 0;
}
CF1556E-Equilibrium【栈,树状数组】相关推荐
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- [NOI Online 2022 提高组] 丹钓战(单调栈 + 树状数组 / 主席树)
problem luogu-P8251 solution 按照题意模拟单调栈. 求出对于 iii 而言,当时单调栈的栈顶元素记为 pip_ipi. 如果到 iii 时,栈顶已经为 pip_ipi ...
- BZOJ1146[CTSC2008]网络管理——出栈入栈序+树状数组套主席树
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...
- CF1621G Weighted Increasing Subsequences(离散化+树状数组优化dp+栈维护后缀最大值+计数)
problem luogu-link solution 显然单独考虑每个 iii 的贡献,即被多少个合法上升子序列包含. 令 x=max{j∣j>i∧aj>ai}x=\max\{j\ | ...
- **PAT_甲级_1057 Stack (30分) (C++)【字符串处理/栈的模拟/树状数组】
目录 1,题目描述 题目大意 2,思路 数据结构 函数讲解 1,void update(int x, int v): 2,int getsum(int x): 3,void PeekMedian(): ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)
目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...
- HDU 4358 树状数组+思路
http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...
- [算法学习] 线段树,树状数组,数堆,笛卡尔树
都是树的变种,用途不同 [线段树 Interval Tree] 区间管理,是一种平衡树 可看做是对一维数组的索引进行管理.一维数组不需要是排序好的 深度不超过logL 任一个区间(线段)都分成不超过2 ...
最新文章
- 重磅图书——PHP MySQL开发新圣经
- Scala单例对象(伴生对象)
- Unity3D Image 组件附入图片问题
- 前端二十九:两个盒子居中的练习
- mysql sql语句大全
- redis+aop防重复提交
- C语言基础:C语言宏定义(4) - 多文件编译
- 网页设计的css样式,网页设计引入CSS样式的五种方式_css
- 计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路
- Java-类加载内存分析
- Ruby 101:重用、隐藏和多态
- 在c语言中利用链表常见问题,C语言,链表中遇到棘手有关问题
- [其他]Ubuntu安装genymotion后unable to load VirtualBox engine
- 2. 创建多网站和商店(Creating Multiple Websites and Stores)
- maven helper解决依赖冲突问题
- echarts x轴文字个数太多_echartsX轴文本数据太长溢出问题
- “华为杯”中国研究生数学建模竞赛 记录
- 新能源汽车电池健康状态及能耗分析
- 商汤的AI伴游小精灵(2019 计蒜之道 初赛 第一场)
- 省份对应拼音(MicroStrategy)
热门文章
- e2200网卡驱动 linux,Linux驱动修炼之道-驱动中一些常见的宏
- sql 多表多行模糊查询_从零开始学习SQL(五)多表查询
- google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...
- requestmapping注解访问404_【框架】127:几个非常重要的注解
- java基础代码下载_Java基础(一)(示例代码)
- 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
- 数据结构 - 二叉树
- 万字总结webpack实战案例配置
- [mybatis]Configuration XML_typeHandlers
- [C++11]弱引用智能指针weak_ptr初始化和相关的操作函数