令$(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(0,0)$,容易发现$S(\{0,1\},0)=\sum_{i=1}^{n}[b_{i}==0]$,那么相当于最小化$S(0,1)-S(0,0)$,因此答案与1的位置无关
然后dp,用$f[i][j]$表示前i个点最小的$S(0,1)-S(0,0)$且$\forall \min(i,j)\le k\le n,a_{k}=[k\le j]$,考虑转移:
1.如果$i\le j$,那么$f[i][j]=\min(f[i][j],f[i-1][j])$;如果$j<i$,那么$f[i][j]=\min(f[i][j],f[i-1][j]+2b_{i}-1)$
2.对于操作区间$[l,r]$,如果$l=i$,那么$f[i][r]=\min(f[i][r],\min_{i-1\le j\le r}(f[i-1][j]))$(注意滚动后要从大到小枚举r)
容易发现以下两种转移都是由$f[i-1]$转移到$f[i]$,用线段树维护,支持区间修改,区间查询最小值,单点取min即可(初始值应该赋为无穷大),最终答案即为$\min(f[n][i])+\sum_{i=1}^{n}[b_{i}==0]$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 vector<int>v[N];
8 int n,m,x,y,ans,a[N],tag[N<<2],f[N<<2];
9 void upd(int k,int x){
10 tag[k]+=x;
11 f[k]+=x;
12 }
13 void down(int k){
14 if (tag[k]){
15 upd(L,tag[k]);
16 upd(R,tag[k]);
17 tag[k]=0;
18 }
19 }
20 void update(int k,int l,int r,int x,int y){
21 if (l==r){
22 f[k]=min(f[k],y);
23 return;
24 }
25 down(k);
26 if (x<=mid)update(L,l,mid,x,y);
27 else update(R,mid+1,r,x,y);
28 f[k]=min(f[L],f[R]);
29 }
30 void update(int k,int l,int r,int x,int y,int z){
31 if ((l>y)||(x>r))return;
32 if ((x<=l)&&(r<=y)){
33 upd(k,z);
34 return;
35 }
36 down(k);
37 update(L,l,mid,x,y,z);
38 update(R,mid+1,r,x,y,z);
39 f[k]=min(f[L],f[R]);
40 }
41 int query(int k,int l,int r,int x,int y){
42 if ((l>y)||(x>r))return 0x3f3f3f3f;
43 if ((x<=l)&&(r<=y))return f[k];
44 return min(query(L,l,mid,x,y),query(R,mid+1,r,x,y));
45 }
46 int main(){
47 scanf("%d",&n);
48 for(int i=1;i<=n;i++){
49 scanf("%d",&a[i]);
50 ans+=(a[i]^1);
51 }
52 scanf("%d",&m);
53 for(int i=1;i<=m;i++){
54 scanf("%d%d",&x,&y);
55 v[x].push_back(y);
56 }
57 for(int i=1;i<=n;i++)sort(v[i].begin(),v[i].end());
58 memset(f,0x3f,sizeof(f));
59 update(1,0,n,0,0);
60 for(int i=1;i<=n;i++){
61 for(int j=(int)v[i].size()-1;j>=0;j--)update(1,0,n,v[i][j],query(1,0,n,0,v[i][j]));
62 update(1,0,n,0,i-1,2*a[i]-1);
63 }
64 printf("%d",f[1]+ans);
65 }

[atARC085F]NRE的更多相关文章

  1. NRE

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

  2. ARC085F NRE

    看了题解. 题目大意 你有一个长度为 \(N\) 的全为 \(0\) 的序列 \(A\),给你一个长度同样为 \(N\) 的 \(0/1\) 序列 \(B\),允许你对把 \(A\) 的一些区间中的数 ...

  3. [ActiveMQ]初识ActiveMQ

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

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

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

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

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

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

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

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

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

  8. servlet(二)

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

  9. jQuery Mobile学习日记之HelloWorld

    这里是本人学习jQuery Mobile的过程,主要用于记录,过程中有不对的地方或不严谨的地方,欢予以指出纠正,非常感谢! 1.首先是下载安装以下文件: [Opera Mobile Emulator] ...

随机推荐

  1. Dapr + .NET Core实战(十二)服务调用之GRPC

    什么是GRPC gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的 ...

  2. typora博客笔记上传图片时不能显示

    前言 markdown具有轻量化.易读易写等特性,并且对于图片.超链接.图片.数学公式都有支持. 但是最近在使用Typora的过程中我发现,在写文章笔记的时候导入的图片,因为图片保存在我们电脑本地,当 ...

  3. java笔记(一直更新)

    .equals()调用时,最好把equals前面放常量或者是确定有的,如果是前面是null,则会报空指针错误 也可以在调用前判断是否为null

  4. 题解 「HDU6403」卡片游戏

    link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...

  5. Java爬虫系列四:使用selenium-java爬取js异步请求的数据

    在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...

  6. spring boot log4j2 最佳实践

    为什么选择 log4j2 Log4j2 使用了 LMAX Disruptor 库.在多线程场景中,异步 Logger 的吞吐量比 Log4j 1.x 和 Logback 高 18 倍,延迟低几个数量级 ...

  7. python编写学习助手0

    项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...

  8. SpringBoot 01 hello world 01

    hello world项目结构: pom中配置的依赖相当于spring boot的可安装插件,需要下载的依赖直接在里边配置. 目前用到的每个注解: 1.主程序中 @SpringBootApplicat ...

  9. keras框架下的深度学习(二)二分类和多分类问题

    本文第一部分是对数据处理中one-hot编码的讲解,第二部分是对二分类模型的代码讲解,其模型的建立以及训练过程与上篇文章一样:在最后我们将训练好的模型保存下来,再用自己的数据放入保存下来的模型中进行分 ...

  10. JVM:GC Roots

    JVM:GC Roots 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 JVM 垃圾回收的时候如何确定垃圾 什么是垃圾 简单来说就是内存中已经不再被使用的空间就 ...