首页 > 其他分享 >ABC388G Simultaneous Kagamimochi 2

ABC388G Simultaneous Kagamimochi 2

时间:2025-01-22 16:43:07浏览次数:1  
标签:lF const int cin ABC388G Simultaneous 团子 Kagamimochi 个元

问题描述

有 \(N\) 个元团子(米团),按照大小升序排列。第 \(i\) 个元团子 \((1≤i≤N)\) 的大小是 \(A_i\)。

给定两个元团子 \(A\) 和 \(B\),它们的大小分别是 \(a\) 和 \(b\) ,你只有在 \(a\) 不超过 \(b\) 的一半时,才能通过将元团子 \(A\) 放在元团子\(B\)之上来制作一个元团子(kagamimochi)。

你被给予Q对整数。设 \((L_i, R_i)\) 是第 \(i\) 对 \((1≤i≤Q)\),对于每个 \(i\),解决以下问题:

仅使用从第 \(L_i\) 个到第 \(R_i\) 个的 \(R_i-L_i+1\) 个元团子,你能同时制作多少个元团子?

更具体地说,找出最大非负整数 \(K\),使得:

  • 在从第\(L_i\)个到第\(R_i\)个的\(R_i - L_i + 1\)个元团子中,选择 \(2K\) 个元团子并形成 \(K\) 对。对于每对元团子,将一个放在另一个之上,以制造 \(K\) 个元团子(kagamimochi)。

题解

设答案为 \(k\),那么可以知道,在区间中最小 \(k\) 个和最大 \(k\) 个可以相互组合起来。设区间区间开头为 \(l\),末尾为 \(r\),那么可以这么组合 \((l, r - k + 1),(l + 1, r - k + 2),...,(l+i - 1,r-k+i)\)

我们尝试在 \([0,\frac{r - l + 1}{2}]\) 二分答案,二分 \(k\),设 \(N_i\) 为 \(i\) 可以在 \([N_i, n]\) 里面的数组合。

\(i\in[l, l + k - 1]\),我们要求 \(i\) 和 \(r - l + 1 - k + i\),那么可以得出 \(N_i\le r - l + 1 - k + i\) 移项得 \(N_i - i\le r - l + 1 - k\),用 ST 维护一下就行了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::cin, std::cout;

#define lF(i, a, b) for (int i = a, END##i = b; i <= END##i; i++)
#define rF(i, a, b) for (int i = a, END##i = b; i >= END##i; i--)

void Init();
void Solve();

signed main() {
	cin.sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	int T = 1;
//	cin >> T;
	while (T--) {
		Init();
		Solve();
	}
	return 0;
}

using LL = long long;
using ULL = unsigned long long;

const int Mod = 1e9 + 7;
const int Inf = 0x3f3f3f3f;
const LL InfLL = 0x3f3f3f3f3f3f3f3f;

const int N = 2e5 + 10, M = 30;
int n, a[N], Log[N], Ne[N], f[N][M];
int l, r;

void init_ST() {
	lF(i, 2, n) Log[i] = Log[i >> 1] + 1;
	lF(i, 1, n) f[i][0] = Ne[i] - i;
	for (int j = 1; (1 << j) <= n; j++)
		lF(i, 1, n - (1 << j) + 1)
			f[i][j] = std::max(f[i][j - 1], f[i + (1 << j - 1)][j - 1]);
}
int ask(int L, int R) {
	int k = Log[R - L + 1];
	return std::max(f[L][k], f[R - (1 << k) + 1][k]);
}

bool check(int Mid) {
	int x = ask(l, l + Mid - 1);
	return l + Mid - 1 + x <= r;
}

void Init() {
}

void Solve() {
	cin >> n;
	lF(i, 1, n) cin >> a[i];
	lF(i, 1, n) Ne[i] = std::lower_bound(a + 1, a + n + 1, 2 * a[i]) - a;
	init_ST();
	int Q; cin >> Q;
	while (Q--) {
		cin >> l >> r;
		int L = 0, R = r - l + 1 >> 1;
		while (L < R) {
			int Mid = L + R + 1 >> 1;
			if (check(Mid)) L = Mid;
			else R = Mid - 1;
		}
		cout << L << "\n";
	}
}

标签:lF,const,int,cin,ABC388G,Simultaneous,团子,Kagamimochi,个元
From: https://www.cnblogs.com/wh2011/p/18686211

相关文章

  • E - Simultaneous Kagamimochi (二分答案+贪心)
    题目链接:https://atcoder.jp/contests/abc388/tasks/abc388_e题意:给定一个数组,当数组中一个数的两倍不超过另一个数时,认为这两个数可以组成一对,(组合后这两个数无法再次进行组合),求最大组合数思路:如果能条件能满足k对,一定能满足k-1对。同时尽量让小的和大的里面相对小的组合......
  • 题解:AT_abc388_g [ABC388G] Simultaneous Kagamimochi 2
    鉴于本题解书写时洛谷题面暂无中文翻译,为避免可能的歧义或困惑,先对本题解中的译法进行约定:(顺便吐槽音译怪)英文题面中“mochi”或日文题面中“餅”译为“饼”。英文题面中“kagamimochi”或日文题面中“鏡餅”译为“镜饼”。鉴于本题是C和E的加强版,而我懒得去写那两题的题......
  • 【机器人学和计算机视觉】SLAM(Simultaneous Localization and Mapping)原理与技术实现
    引言SLAM(SimultaneousLocalizationandMapping,即时定位与地图构建)是机器人学和计算机视觉领域的一项关键技术。它允许机器人在未知环境中自主导航,同时构建环境的地图并确定自身的精确位置。SLAM技术在机器人、无人驾驶、增强现实和无人机等领域有着广泛的应用。本文将......
  • SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)
    了解了常见的几种手势后,接下来我们了解一下组合手势的操作,当一个视图存在多个手势的时候,为了避免手势冲突,SwiftUI提供了自定义手势的方法,比如同时进行,顺序进行等等。以下是一些常见的多种手势组合使用方式:simultaneously(with:):同时使用多个手势,使它们可以同时响应用户的......
  • How to connect two pairs of AirPods to one phone simultaneously
    TechStreamingHomeKitchenHealthStyleBeautyGiftsDealsMore REVIEWS  TECHHowtoconnecttwopairsofAirPodstoonephonesimultaneouslyWrittenby AbigailAbesamisDemarest and DevonDelfino; editedby ElenaMatarazzo Updated......
  • python实现同时给多个变量赋值的方法 Simultaneous Assignments
    SimultaneousAssignmentsx,y=y,x这个赋值的执行流程是什么?python的多元赋值原理是tuple的元组封装(tuplepacking)和序列拆封(sequenceunpacking)。t=12345,54321,'hello!'这是元组封装(tuplepacking)的例子,将多个值放进tuple里。x,y,z=t元组封装(tuplepacking)的......
  • SimultaneousSwap
    [ABC296F]SimultaneousSwap首先,若对\(a_i\)和\(b_i\)排序后,\(a_i\)和\(b_i\)仍不相同,则一定不行。注意到有:\(a_i=\quad{A\B\C}\),换\(AC\)\(b_i=\quad{A\B}\C\),换\(AB\)变为\(a_i=\quad{C\B\A}\),换\(CA\)\(b_i=\quadB{A\C}......
  • 简读||Radio SLAM: A Review on Radio-based Simultaneous Localization and Mapping
    原文链接:(PDF)RadioSLAM:AReviewonRadio-basedSimultaneousLocalizationandMapping(researchgate.net) 摘要同步定位与地图构建(SLAM)算法使移动机器......
  • 竞赛图初探 || CF1779E Anya's Simultaneous Exhibition - 竞赛图 - 交互 -
    题目链接:https://codeforces.com/contest/1779/problem/E题解:将一个完全图的每条边定向,构成的有向图叫做竞赛图也很好理解,\(n\)个人两两比赛,肯定有胜有负,赢家向负者连......
  • Anya's Simultaneous Exhibition
    题意description交互题。一共\(n(n\leq250)\)个人,两两之间存在胜负关系(不具有传递性),现在举行锦标赛,每次从剩下的人里选两个人决斗,胜负关系中胜者留下,负者淘汰。$n-1$......