首页 > 其他分享 >Japanese Student Championship 2021 F Max Matrix

Japanese Student Championship 2021 F Max Matrix

时间:2023-06-30 23:35:01浏览次数:47  
标签:typedef Championship Matrix limits Max ll long maxn sum

洛谷传送门

AtCoder 传送门

我们考虑动态维护答案。如果已经知道上一步的答案,考虑计算这一次操作之后答案的变化。

考虑现在有一个数列 \(a_{1 \sim n}\),我们想知道 \(\sum\limits_{i = 1}^n \max(x, a_i)\)。

计算出 \(c = \sum\limits_{i = 1}^n [a_i < x], s = \sum\limits_{i = 1}^n [a_i \ge x] a_i\),答案显然就是 \(s + c \times x\)。

这题和上面的题本质相同。以第一种操作为例,每次答案减去旧的 \(a_x\) 对 \(b\) 造成的贡献,再加上 \(y\) 对 \(b\) 造成的贡献。第二种操作是对称的。

于是我们只需要对 \(y_i\) 离散化后,行和列分别维护两个树状数组表示 \(\sum\limits_{i = 1}^n [a_i \le x]\) 和 \(\sum\limits_{i = 1}^n [a_i \le x] a_i\),一共四个树状数组即可。

时间复杂度 \(O(q \log (q + n + m))\)。

code
// Problem: F - Max Matrix
// Contest: AtCoder - Japanese Student Championship 2021
// URL: https://atcoder.jp/contests/jsc2021/tasks/jsc2021_f
// Memory Limit: 1024 MB
// Time Limit: 3000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 200100;

ll n, m, q, a[maxn], b[maxn], lsh[maxn], tot;

struct node {
	ll op, x, y;
} c[maxn];

struct BIT {
	ll c[maxn];
	
	inline void update(int x, ll d) {
		for (int i = x; i <= tot; i += (i & (-i))) {
			c[i] += d;
		}
	}
	
	inline ll query(int x) {
		ll res = 0;
		for (int i = x; i; i -= (i & (-i))) {
			res += c[i];
		}
		return res;
	}
	
	inline ll query(int l, int r) {
		return query(r) - query(l - 1);
	}
} t1, t2, t3, t4;

inline ll calc1(ll x) {
	return t4.query(x, tot) + lsh[x] * t3.query(x - 1);
}

inline ll calc2(ll x) {
	return t2.query(x, tot) + lsh[x] * t1.query(x - 1);
}

void solve() {
	scanf("%lld%lld%lld", &n, &m, &q);
	lsh[++tot] = 0;
	for (int i = 1; i <= q; ++i) {
		scanf("%lld%lld%lld", &c[i].op, &c[i].x, &c[i].y);
		lsh[++tot] = c[i].y;
	}
	sort(lsh + 1, lsh + tot + 1);
	tot = unique(lsh + 1, lsh + tot + 1) - lsh - 1;
	for (int i = 1; i <= n; ++i) {
		a[i] = 1;
	}
	for (int i = 1; i <= m; ++i) {
		b[i] = 1;
	}
	t1.update(1, n);
	t3.update(1, m);
	ll ans = 0;
	for (int i = 1; i <= q; ++i) {
		ll op = c[i].op, x = c[i].x, y = c[i].y;
		y = lower_bound(lsh + 1, lsh + tot + 1, y) - lsh;
		if (op == 1) {
			t1.update(a[x], -1);
			t2.update(a[x], -lsh[a[x]]);
			ans -= calc1(a[x]);
			a[x] = y;
			t1.update(y, 1);
			t2.update(y, lsh[y]);
			ans += calc1(y);
		} else {
			t3.update(b[x], -1);
			t4.update(b[x], -lsh[b[x]]);
			ans -= calc2(b[x]);
			b[x] = y;
			t3.update(y, 1);
			t4.update(y, lsh[y]);
			ans += calc2(y);
		}
		printf("%lld\n", ans);
	}
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,Championship,Matrix,limits,Max,ll,long,maxn,sum
From: https://www.cnblogs.com/zltzlt-blog/p/17518025.html

相关文章

  • leetcode -- Maximum Gap -- 与distributed sorting有关,重点复习一下
    https://leetcode.com/problems/maximum-gap/sort算法除了比较算法之外,还有distributedsort,时间效率可以优于O(nlogn),甚至可以达到O(n).包括coutingsort,bucketsort,radixsort.复习这三种的原理。参考https://www.byvoid.com/blog/sort-radix这里对于bucketsort,提到可能......
  • Maximum Depth of Binary Tree
    Giventherootofabinarytree,returnitsmaximumdepth.Abinarytree'smaximumdepth isthenumberofnodesalongthelongestpathfromtherootnodedowntothefarthestleafnode.Solution:classSolution(object):defmaxDepth(self,root):......
  • 【雕爷学编程】Arduino动手做(140)---MAX3232串口转换板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • MySQL参数max_connect_errors分析释疑
    最近一MySQL服务器,由于一些特殊因素遇到“ERROR1129(00000):Host'xxx'isblockedbecauseofmanyconnectionerrors.Unblockwith'mysqladminflush-hosts'”,在问题解决后,在详细了解参数max_connect_errors的过程中,有些不同网络资料的矛盾描述确实让我有点迷惑和混淆(关......
  • ClimaX
    摘要:当前大多数模型使用整理好的同质的数据,也就是说针对特定数据特定下游任务的。ClimaX使用跨越不同变量、空间位置、物理基础的异构数据,也就是说是一个经过自监督预训练(CMIP6)的大模型。intro:第一个问题:训练大模型要使用非常大的数据集进行与训练,NLP和CV使用了互联网规模的数据......
  • Optimizing Disk I/O tmp_table_size max_heap_table_size 磁盘使用率
     RDSMySQL临时文件导致实例磁盘空间满且出现“锁定中”状态https://help.aliyun.com/document_detail/101763.htmlRDSMySQL临时文件导致实例磁盘空间满且出现“锁定中”状态更新时间:2023-05-2611:22产品详情相关技术圈 问题描述阿里云云数据库RDSMySQL......
  • 矩阵求导(Matrix Derivative)
    矩阵求导(MatrixDerivative)也称作矩阵微分(MatrixDifferential),在机器学习、图像处理、最优化等领域的公式推导中经常用到。矩阵求导实际上是多元变量的微积分问题,只是应用在矩阵空间上而已,即为标量求导的一个推广,他的定义为将自变量中的每一个数与因变数中的每一个数求导。Notes:经......
  • How to understand matrix(Primary)
    WhatisMatrix?TODOWhatisEigenvectorandEigenvalue?任何只被矩阵缩放而不被旋转的矢量被称为该矩阵的特征向量(Eigenvector),而向量被缩放的程度称为特征值(Eigenvalue)。WhatisLinearalgebra?不同的输入矢量会被缩放和旋转得到不同的结果。然而,这些变换都是线性的,也就是......
  • Nginx配置max_fails fail_timeout 不起作用 - stub_status - 调试 nginx --with-deb
    0.stub_statusconfigurearguments:--prefix=/usr/local/tengine--with-http_realip_module--with-http_gzip_static_module--with-pcre--with-http_stub_status_module--with-http_ssl_module--add-module=/opt/nginx-goodies-nginx-sticky-module-ng[root@slave1con......
  • Oracle 安装报SGA size can not be greater than maximum shared memory segment size
    问题现象:问题分析:        从问题现象上来看可以比较清晰的看出是因为系统的内核参数调整问题,导致无法分配正确的内存给SGA;那么这种情况通常是由于我们的/etc/sysctl.conf中配置的内存信息和实际内存信息不符合导致。 我们的物理内存的大小为2G,swap内存的大小为4G;[root@d......