看了题解。

题目大意

你有一个长度为 \(N\) 的全为 $0$ 的序列 \(A\),给你一个长度同样为 \(N\) 的 $0/1$ 序列 \(B\),允许你对把 \(A\) 的一些区间中的数组全部改成 $1$,最小化 \(A\) 和 \(B\) 数字不同的位置个数。

解法

https://img.atcoder.jp/arc085/editorial.pdf

题解写得很清楚了。。。

总之就是把要求的东西进行一些奇妙变换,免去了变为 $1$ 的代价计算,把添加线段的那个没法优化的转移给换掉。。。

UPD:那个转换没有必要,直接 DP 即可。。。

实现

#include <bits/stdc++.h>

using namespace std;

const int INF = 2e9;

struct Node {
typedef Node* NP;
NP l, r;
int sz, mi;
Node(int _sz) : l(NULL), r(NULL), sz(_sz) {
mi = INF;
if (sz == 1) return;
l = new Node(sz/2);
r = new Node(sz-sz/2);
}
void set(int k, int v) {
if (sz == 1) {
mi = min(mi, v);
return;
}
if (k < sz/2) {
l->set(k, v);
} else {
r->set(k-sz/2, v);
}
mi = min(l->mi, r->mi);
}
int get(int a, int b) {
if (b <= 0 || sz <= a) return INF;
if (a <= 0 && sz <= b) return mi;
return min(l->get(a, b), r->get(a-sz/2, b-sz/2));
}
}; const int MN = 200010;
int n, q;
int b[MN];
vector<int> v[MN]; int main() {
cin.tie(0);
ios::sync_with_stdio(false); cin >> n;
int ans = 0;
for (int i = 0; i < n; i++) {
cin >> b[i];
if (b[i] == 0) {
ans++;
b[i]--;
}
}
cin >> q;
for (int i = 0; i < q; i++) {
int l, r;
cin >> l >> r; l--;
v[l].push_back(r);
}
Node* tr = new Node(n+1);
for (int i = 0; i <= n; i++) {
if (i) {
tr->set(i, tr->get(i-1, i) + b[i-1]);
} else {
tr->set(0, 0);
}
for (int j = 0; j < int(v[i].size()); j++) {
int r = v[i][j];
tr->set(r, tr->get(i, r));
}
}
ans += tr->get(n, n+1);
cout << ans << endl;
return 0;
}

ARC085F NRE的更多相关文章

  1. NRE

    NRE是Non-Recurring Engineering的缩写,NRE费用即一次性工程费用,是指集成电路生产成本中非经常性发生的开支,明确地说就是新的集成电路产品的研制开发费·新产品开发过程中的设计 ...

  2. ARC085F(动态规划,线段树)

    #include<bits/stdc++.h>using namespace std;const int maxn = 0x3f3f3f3f;int mn[801000];int cost ...

  3. [atARC085F]NRE

    令$(S_{a},S_{b})$表示$a_{i}\in S_{a}$且$b_{i}\in S_{b}$的i个数,那么答案相当于$S(0,1)+S(1,0)=S(0,1)+S(\{0,1\},0)-S( ...

  4. [ActiveMQ]初识ActiveMQ

    初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...

  5. 谈谈SQL 语句的优化技术

    https://blogs.msdn.microsoft.com/apgcdsd/2011/01/10/sql-1/ 一.引言 一个凸现在很多开发者或数据库管理员面前的问题是数据库系统的性能问题.性能 ...

  6. Android学习——windows下搭建NDK_r9环境

    1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个 ...

  7. java web学习总结(六) -------------------servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  8. 深入理解C++对象模型

    C++对象模型是比较重要的一个知识点,学习C++对象的内存模型,就可以明白C++中的多态原理.类的初始化顺序问题.类的大小问题等. 1 C++对象模型基础 1.1 C++对象中都有哪些东东 C++对象 ...

  9. servlet(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

随机推荐

  1. 初涉FlaskWeb开发----基础篇

    1.web程序运行的基本流程 {客户端发送请求 <-----> 服务器返回响应} 2.使用框架可以降低开发难度,提高开发效率. 3.Flask框架的基本认识: 特点:用Python语言实现 ...

  2. 实际操作中遇到的问题--Django中查看已安装的包的相关命令

    pip freeze  --------查看已经安装的包 pip uninstall 安装包名 ---------卸载已安装的包 pip install 安装包名--------安装包

  3. 访问mysql出现Access denied for user 'root'@'的解决方法

    1.关闭mysql的服务 方法一:我的电脑右键-管理-服务和应用程序-服务,找到mysql,右键关闭 方法二:cmd进入命令提示符,service mysqld stop(这个是网上的方法,我试了一下 ...

  4. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte sequence

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  5. react初学之render返回加括号的问题

    刚在学习react的初始阶段,跑了一段代码 var  Mydom = React.createClass({ render:function(){ return <div> <inp ...

  6. Python学习第六课

    Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...

  7. C# Winform 国际化

    1.在Form的language属性选择中文,来制作中文界面 保存后,设置界面标题会变成如下所示,并且会出现一个zh-CN的资源文件,打开resx文件可看到相应内容 2.将Form的language属 ...

  8. Linux 环境下安装Mysql的步骤

    一,以linux cent 6.9 安装mysql 5.6.39为例#下载安装包wget --no-check-certificate https://dev.mysql.com/get/Downlo ...

  9. 学习Linux的软件管理、进程管理

    一.软件管理 1.使用yum管理软件安装包 1.1什么是yum Yum (全称为:Yellow dog Updater, Modified) 由Duke University团队,修改Yellow D ...

  10. 学习java的阶段性理解(其它语言也一样)

    打算从今天开始学java啊,待会滚去找资料了.现在谈一下学习java阶段性的理解.由于现在对java真的啥也不知道啊,不过还是要瞎鸡儿写点自己的看法,以下看法应该也使适用于其它语言: 第一阶段,入门级 ...