题解- AT3673[ARC085D]NREAT3673 [ARC085D] NREAT3673[ARC085D]NRE

  • 题目意思

    就是你原有一个全是000的序列aaa,有mmm个操作,你可以选取其中任意多个,每次操作(l,r)(l,r)(l,r),即把al−ara_l-a_ral​−ar​的值变为111,问∑ai≠bi\sum a_i≠b_i∑ai​​=bi​。

  • SolSolSol

    一道比较难的思维+数据结构题。

    首先我们把ai,bia_i,b_iai​,bi​看作一个二元组(a,b)(a,b)(a,b),其实对答案的贡献∑i=1n(0,1)+∑i=1n(1,0)\sum\limits_{i=1}^n(0,1) +\sum\limits_{i=1}^n(1,0)i=1∑n​(0,1)+i=1∑n​(1,0)。同时我们又可以把这个柿子化为∑i=1n(0,1)+∑i=1n(?,0)−∑i=1n(0,0)\sum\limits_{i=1}^n(0,1) +\sum\limits_{i=1}^n(?,0)-\sum\limits_{i=1}^n(0,0)i=1∑n​(0,1)+i=1∑n​(?,0)−i=1∑n​(0,0)。于是其实现在已经和(1,?)(1,?)(1,?)没关系了。

    于是我们就开始DPDPDP,设fif_ifi​表示前iii个数使得[(0,1)−(0,0)][(0,1)-(0,0)][(0,1)−(0,0)]最小值。我们可以用线段树来优化(只要分选或不选的情况即可),具体的fi=fi−1+(a[i])?1:−1f_i=f_{i-1}+(a[i])?1:-1fi​=fi−1​+(a[i])?1:−1,因为由[(0,1)−(0,0)][(0,1)-(0,0)][(0,1)−(0,0)]可知,还是比较显然的。

    这道题目总体来说还是挺难的,关键是这个思路的转化。

  • CodeCodeCode

#include <bits/stdc++.h>
using namespace std;inline int read()
{int sum=0,ff=1; char ch=getchar();while(!isdigit(ch)){if(ch=='-') ff=-1;ch=getchar();}while(isdigit(ch))sum=sum*10+(ch^48),ch=getchar();return sum*ff;
}const int N=2e5+5;int n,m,suf[N][2],laz[N<<2],tr[N<<2];
int ans,a[N],f[N];
vector<int> po[N];struct nood
{int l,r;inline bool friend operator < (const nood&c,const nood &d){return c.l<d.l;}
};
nood c[N];inline int min(int x,int y)
{return (x>y)?y:x;
}inline void build(int rt,int l,int r)
{tr[rt]=1e9;if(l==r) return;int mid=(l+r)/2;build(rt<<1,l,mid); build(rt<<1|1,mid+1,r);tr[rt]=min(tr[rt<<1],tr[rt<<1|1]);
}inline void modify(int rt,int l,int r,int pos,int val)
{if(l==r){tr[rt]=min(tr[rt],val);return;}int mid=(l+r)/2;if(pos<=mid) modify(rt<<1,l,mid,pos,val);else modify(rt<<1|1,mid+1,r,pos,val);tr[rt]=min(tr[rt<<1],tr[rt<<1|1]);
}inline int query(int rt,int l,int r,int ll,int rr)
{if(ll<=l&&r<=rr) return tr[rt];int mid=(l+r)/2;int ret=1e9;if(ll<=mid) ret=min(ret,query(rt<<1,l,mid,ll,rr));if(rr>mid) ret=min(ret,query(rt<<1|1,mid+1,r,ll,rr));return ret;
}signed main()
{n=read();for ( int i=1;i<=n;i++ ) {int x=read();a[i]=x;suf[i][0]=suf[i-1][0]+(x==0);suf[i][1]=suf[i-1][1]+(x==1);}memset(f,127/3,sizeof(f));m=read();for ( int i=1;i<=m;i++ ) c[i]=(nood){read(),read()};sort(c+1,c+m+1);for ( int i=1;i<=m;i++ ) po[c[i].l].push_back(c[i].r);f[0]=0;build(1,1,n);for ( int i=1;i<=n;i++ ) {for ( int j=0;j<po[i].size();j++ ){int r=po[i][j];int mi=f[i-1];mi=min(mi,query(1,1,n,max(i-1,1),r));if(mi<f[r]){f[r]=mi;modify(1,1,n,r,mi);}}f[i]=min(f[i],f[i-1]+((a[i]==1)?1:-1));}printf("%d\n",f[n]+suf[n][0]);return 0;
}

题解 AT3673 【[ARC085D] NRE】相关推荐

  1. AT3673 NRE

    化简一下题意:其实就是求: \(\sum_{i = 1}^n [a0b1] + \sum_{i = 1}^n [a1b0]\) 其实就等于\(\sum_{i = 1}^n [a0b1] + \sum_ ...

  2. [Atcoder ARC085 F] NRE 线段树优化dp

    Atcoder ARC085 F NRE 海明距离好像不知道是什么东西,这道题目还是直接看DOFY dalao的题解的. 似乎这道题目只能有一种设计状态的方法,其他方法都会GG. 设f[i][j]表示 ...

  3. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  4. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  5. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  6. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  7. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  8. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  9. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

最新文章

  1. 解决oracle主键问题,解决renren-security使用oracle主键问题
  2. AB1601蓝牙初始化注意事项
  3. Centos7 安装和配置MySQL5.7
  4. 数据库面试题【十五、优化查询过程中的数据访问】
  5. nodejs,python,sublime和Eclipse的包管理器
  6. HDU5923-Prediction-有继承味道的并查集
  7. 二项分布的期望方差证明_关于二项分布
  8. 学习笔记之C / C++
  9. AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792
  10. python棋盘覆盖_java实现的棋盘覆盖
  11. 计算机考试excel基础试题,计算机基础(Excel2010)试题及答案解析
  12. 电视网络机顶盒破解记录
  13. android可拖动的控件,Android拖动控件的实现,自定义可拖动的LinearLayout
  14. stata图像绘制专题【计量经济系列(二)】
  15. 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
  16. macosx安装之旅(8)-常见问题(转载)
  17. 愚人节导入_最好的开发商愚人节
  18. 靶机渗透练习35-ContainMe
  19. 半夜冒着大雨跑网吧写文章是怎样的体验?
  20. 同卵双胞胎的2型糖尿病的易感性位点的综合表观基因分析

热门文章

  1. use python to sendmail
  2. 计算机图像处理与分析研究,计算机图像处理与分析浅析
  3. 【Qt+FFmpeg】解码播放本地视频(二)——实现播放、暂停、重播、倍速功能
  4. 安全基线、本地安全策略、账户安全----Windows应用安全
  5. 微软Xbox服务器太烂,国行Xbox One给跪了!微软Xbox Live竟压根没架设国服
  6. 移动医疗APP的迅速发展,带来了什么信息
  7. 博客项目搭建(码神之路)
  8. 【数据库】事务隔离级别
  9. 如何快速的学习嵌入式
  10. 盘点一下国内外优秀的“低代码”开发平台