首页 > 其他分享 >[题解](更新中)MX-X6 A~B

[题解](更新中)MX-X6 A~B

时间:2024-10-04 12:49:46浏览次数:4  
标签:le int 题解 mid long ge iff X6 MX

Portal:https://www.luogu.com.cn/contest/200833

A - もしも

容易发现可以构造\(1,x\)或\(x,1\)让序列如\(\dots,1,x,1,x,1,x,\dots\)这样循环。只需要关注\(n\)的奇偶性即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,an;
signed main(){
	cin>>t;
	while(t--){
		cin>>n>>an;
		if(n&1) cout<<an<<" "<<1<<"\n";
		else cout<<1<<" "<<an<<"\n";
	}
	return 0;
}

B - さよならワンダーランド

根据题意,我们找到的\(j\)需要满足:

  • \(j\ge 1-i\)
  • \(j\le n-i\)
  • \(j\ge a_i\)
  • \(j\le a_{i+j}\)

其中前\(3\)项都是静态的,与\(j\)无关的,所以我们在前\(3\)项限制的范围\([l,r]\)内寻找\(j\)使得\(j\le a_{i+j}\)即可,这也是此题的关键点。

我们记\(b_i=a_i-i\),那么
\(a_{i+j}\ge j\)
\(\iff [\max\limits_{j\in [l,r]}a_{i+j}-j]\ge 0\)
\(\iff [\max\limits_{j\in [l,r]}a_{i+j}-(i+j)]\ge (-i)\)
\(\iff \max\limits_{j\in [l,r]}b_{i+j} \ge (-i)\)

因此我们仅需用ST表维护出\(b\)的区间最大值,然后查找是否存在就直接看最后那个式子是否成立;查找具体位置我直接用的二分,如果\([l,mid]\)成立,那么左边一定存在合法的\(j\)(不是说右边没有),否则\(j\)一定在右边。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 300010
using namespace std;
int n,a[N],f[N][30],lg[N];
void init(){
	lg[0]=-1;
	for(int i=1;i<=n;i++) lg[i]=lg[i/2]+1;
	for(int i=1;i<=lg[n];i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
		}
	}
}
int query(int l,int r){
	if(r<l) return LLONG_MIN;
	int len=lg[r-l+1];
	return max(f[l][len],f[r-(1<<len)+1][len]);
}
int modi(int a){
	return min(max(1ll,a),n);
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		f[i][0]=a[i]-i;
	}
	init();
	for(int i=1;i<=n;i++){
		int l=max(a[i],1-i),r=n-i;
		if(query(i+l,i+r)>=-i){
			while(l<r){
				int mid=(l+r)>>1;
				if(query(i+l,i+mid)>=-i) r=mid;
				else l=mid+1;
			}
			cout<<"1 "<<l<<"\n";
		}else cout<<"0\n";
	}
	return 0;
}

标签:le,int,题解,mid,long,ge,iff,X6,MX
From: https://www.cnblogs.com/Sinktank/p/18446512

相关文章

  • [题解]SFMOI Round I A~C
    Portal:https://www.luogu.com.cn/contest/179008\(\bf{100+50+50+25+5=\color{indianred}225\color{black}\,\rk.\184}\)A-StrangeCakeGame显然对于小W,向下移动蛋糕刀是最有利的;对于小M,向右移动是最有利的。所以双方以最佳状态移动,最终\(x\ley\)的巧克力是小W的。直接......
  • 【题解】「CF765F」Souvenirs
    https://www.luogu.com.cn/problem/CF765F首先有一个比较navie的\(O(n\sqrtm\logn)\)的做法(add和del的时候,用两个multiset维护一下。有一个bitset的做法来优化用multiset查询前驱后继的做法:https://www.luogu.com.cn/article/zcmco6hd首先考虑离线下来,将询问挂......
  • CF154C题解
    传送门:https://codeforces.com/problemset/problem/154/C求出无向图中,满足所有出边都相连或出边直接连接点对的点对数。很显然可以暴力枚举点对一对对去check,时间复杂度\(O(n^2+m)\)。#include<bits/stdc++.h>usingnamespacestd;inlineintread(){charc;boo......
  • 构树 题解
    构树题解好题,除了毒瘤卡空间。“恰好”这个形式很二项式反演。设\(f(n)\)表示树上钦定\(n\)条边和原树相同的方案数,\(g(n)\)表示树上恰好有\(n\)条边和原树相同的方案数,那么原先的形式是:\[f(n)=\sum_{i\gen}{i\choosen}g(i)\]二项式反演得到:\[g(n)=\sum_{i\gen}(......
  • QOJ 8726 [APIO2024] 魔术表演 题解
    DescriptionAlice和Bob是著名的魔术师。Catherine是一位富豪,她非常喜欢观看Alice和Bob的魔术。某一天,Catherine决定向Alice和Bob发出挑战:只要他们能成功表演如下的魔术,Catherine就将向他们提供巨额奖金!这个魔术的表演过程如下:步骤\(1\):Bob进⼊⼀个密室中,在魔术......
  • 题解:洛谷P2339 [USACO04OPEN] Turning in Homework G
    题目链接:洛谷P2339[USACO04OPEN]TurninginHomeworkG首先我们考虑如何处理到达给定时间后才能交作业这一限制。其实在生活中,我们一般只会考虑什么时候交作业截止(除了某些卷王),这样我们只用考虑如何在最大结束时间之前交作业,而不是在所有作业都没开始交之前考虑如何转悠(前者明......
  • 题解:CF2009G1 Yunli's Subarray Queries (easy version)
    题目要求\(a_i=a_{i-1}+1\),设\(b_i=a_i-i\),如果\(b_i=b_j\),那么\(i\)和\(j\)就在正确的相对位置上。这应该很好理解吧,\(a\)是一个公差为\(1\)的等差数列,下标也是一个公差为\(1\)的等差数列,对应位置相减就相等了。我们在输入\(a_i\)的时候减去\(i\),然后用滑动窗口......
  • [题解] [SDOI2011] 消防
    [题解][SDOI2011]消防tag:图论、树、树的直径题目链接(洛谷):https://www.luogu.com.cn/problem/P2491题目描述给定一棵\(n\)个节点的树,第\(i\)条边有边权\(z_i\)。要求找到树上一条长度不大于\(s\)的简单路径,使得不在路径上的点到该路径的最大距离最小。数据范围:\(1......
  • 算法基础课——基础算法题解
    排序算法(分治)快速排序:题面:给定你一个长度为\(n\)的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数\(n\)。第二行包含\(n\)个整数(所有整数均在\(1\sim10^9\)范围内),表示整个数列。输......
  • 题解9.29-10.3
    1.MakeitAlternating如果它已经是交替的序列我们就不用管了,最终的目的是把序列变成交替的序列,那么我们可以把连续相同的数全部取出来只留下一个,可以分成几段相同的数,最后的结果就是把这些相同的数全部只保留一个,用排列组合C(m,1);第一个结果很简单,把重复的数加一下即可,后面的答......