首页 > 其他分享 >【Tricks,典】[ARC085F] NRE

【Tricks,典】[ARC085F] NRE

时间:2023-08-12 15:11:14浏览次数:38  
标签:int modify Tricks tr NRE t1 ARC085F rn define

一眼顶针,鉴定为 implement 不足,我写不出来。
先通过 Trick 转化 \(a_i = 0 \to -1,a_i = 1 \to 1\)。
那么显然把 \([l, r]\) 全部摊为 1 的贡献就是 \(a_{l \to r}\)。转化为 n - 最大贡献。
然后我们可以转化以下。

\[f_i = f_j + a_r - a_{l - 1} (r_j < l) \]

\[f_i = f_j + a_r - a_{r_j} (r_j > l) \]

开两颗线段树维护即可,注意一点点 implement 就是前面啥都不放。
可能是那个 trick 没用上来,所以就没有很好地实现。
总结:可以使用 \(+1 -1\) 将区间数满足的条件转化为贡献数。

#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i ++)
#define per(i, r, l) for (int i = r; i >= l; i --)
#define ckmx(x, y) x = x < y ? y : x
#define cpy(x, y, s) memcpy(x, y, sizeof(x[0]) * (s))
#define mem(x, k) memset(x, k, sizeof(x))
#define ll long long
#define lc x << 1
#define rc x << 1 | 1
// \yhx-12243/ 鱼大保佑!!
using namespace std;

const int _ = 2e5 + 5, inf = -1e9 + 5;

template <int maxn>
struct sgt {
	int tr[maxn << 2], tag[maxn << 2];
	void build (int x, int l, int r) {
		tr[x] = tag[x] = inf;
		if (l == r) return ;
		int mid = (l + r) >> 1;
		build(lc, l, mid), build(rc, mid + 1, r);
	}
	void apply (int x, int k) {	ckmx(tag[x], k), ckmx(tr[x], k); }
	void pushdown (int x) {
		apply(lc, tag[x]), apply(rc, tag[x]);
		tag[x] = inf;
	}
	void modify (int x, int l, int r, int ql, int qr, int k) {
		if (ql <= l && r <= qr) return apply(x, k), void();
		int mid = (l + r) >> 1;
		pushdown(x);
		if (ql <= mid) modify(lc, l, mid, ql, qr, k);
		if (qr > mid) modify(rc, mid + 1, r, ql, qr, k);
		tr[x] = max(tr[lc], tr[rc]);
	}
	int query (int x, int l, int r, int p) {
		if (l == r) return tr[x];
		int mid = (l + r) >> 1;
		pushdown(x);
		if (p <= mid) return query(lc, l, mid, p);
		else return query(rc, mid + 1, r, p);
	}
} ;
sgt <_> t1, t2;

struct Range {
	int l, r;
	bool operator < (const Range & x) const {
		return r < x.r || (r == x. r && l < x.l);
	}
} rn[_];

int n, q, a[_], sum, res;

int main () {
	ios :: sync_with_stdio(0);
	cin >> n;
	rep(i, 1, n) cin >> a[i], a[i] = a[i - 1] + (a[i] ? 1 : -1);
	sum = (n - a[n]) / 2, res = sum;
	cin >> q;
	rep(i, 1, q) cin >> rn[i].l >> rn[i].r;
	sort(rn + 1, rn + 1 + q);
	t1.build(1, 0, n), t2.build(1, 1, n);
	t1.modify(1, 0, n, 0, n, sum);
	rep(i, 1, q) {
		int l = rn[i].l, r = rn[i].r;
		int x = t1.query(1, 0, n, l) + a[r] - a[l - 1];
		x = max(x, t2.query(1, 1, n, l) + a[r]);
		t1.modify(1, 0, n, r + 1, n, x);
		t2.modify(1, 1, n, l, r, x - a[r]);
		res = max(res, x);
	}
	cout << n - res << endl;
	return 0;
}

标签:int,modify,Tricks,tr,NRE,t1,ARC085F,rn,define
From: https://www.cnblogs.com/Custlo/p/17624834.html

相关文章

  • SpringBoot复习:(21)自定义ImportBeanDefinitionRegistrar
    要达到的目的:将某个包下使用了某个自定义注解(比如@MyClassMapper)的类注册到Spring容器。一、自定义注解:packagecom.example.demo.service;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)publ......
  • openresty(nginx)、lua、drizzle测试
    一、概述:1.研究目标:nginx中使用lua脚本,及nginx直接访问mysql,redis2.需要安装的内容:openresty,mysql,redis3.OpenResty(也称为ngx_openresty)是一个全功能的Web应用服务器。它打包了标准的Nginx核心,很多的常用的第三方模块,以及它们的大多数依赖项。http://openresty.org/cn/ind......
  • Unreal Engine 5.2 .uasset文件格式分析
       以下内容只包含UE5的5.2版本,不包含兼容性内容,不同版本可能会有所不同。提示:   N :通常代表数组个数  ? :代表不确定,比如字符串的长度。  * :乘积  TypeName:Size:此说明并非定义位域,是在说明此处的数据类型、名称以及空间占用,空间单位为字......
  • Pythonre.compile:用于优化正则表达式匹配的工具
    https://blog.csdn.net/www_xuhss_com/article/details/130858409?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-130858409-blog-86527810.235%5Ev38%5Epc_relevant_sort_base3&depth_1-utm_......
  • 一些 tricks
    网络流最小割的可行边和必须边判定可行边:满流。在残余网络中找不到\(u\rightarrowv\)的路径。必须边:满流残余网络中源点能到入点,出点能到汇点。证明......
  • .Net Core AlwaysRunResultFilter
    目录作用实现IAlwaysRunResultFilterIAsyncAlwaysRunResultFilterDemoCustomAsyncAlwaysRunResultFilterAttribute.cs全局注册Program.cs作用修改返回值,始终会触发,即使filter已经中断也会执行AlwaysRunFilter任何时刻都会执行一遍,可以在做了缓存的时候(如果有缓存并中......
  • UE5 unresolved external symbol 解决方案
    背景unresolvedexternalsymbol问题是模块代码使用了其他模块,build.cs文件中没有添加对这些模块的依赖问题Error LNK2001 unresolvedexternalsymbol"public:virtualvoid__cdeclUWidget::PreSave(classFObjectPreSaveContext)"(?PreSave@UWidget@@UEAAXVFObjectPreSaveCon......
  • OpenResty 入门实战(2)--简单使用
    本文主要介绍 OpenResty 结合lua的使用,Nginx功能的一般使用可参考:Nginx入门实战(2)--简单使用;文中所使用到的软件版本:Centos7.9.2009、OpenResty1.21.4.2。1、helloworldserver{listen9096;server_namelocalhost-9096;access_loglogs/access-9096.log;......
  • fatal: refusing to merge unrelated histories
    ​ "fatal:refusingtomergeunrelatedhistories"是Git在合并操作时可能会遇到的错误信息。这个错误通常出现在尝试合并两个不相关的代码仓库或两个没有共同历史的分支时。Git默认情况下会拒绝合并这些不相关的历史,因为它无法确定如何正确地将它们合并在一起。这个错误......
  • fatal: refusing to merge unrelated histories
    ​ "fatal:refusingtomergeunrelatedhistories"是Git在合并操作时可能会遇到的错误信息。这个错误通常出现在尝试合并两个不相关的代码仓库或两个没有共同历史的分支时。Git默认情况下会拒绝合并这些不相关的历史,因为它无法确定如何正确地将它们合并在一起。这个错误......