[AGC028-E][树状数组]High Elements

【Atcoder】AGC028 B-E简要题解 B.模型转化+套路期望 C.贪心 D.枚举转化+容斥 E.贪心构造可行解 阅读详情

翻译

在这里插入图片描述

题解

菜逼选手又来报到啦!
对于字典序最小的问题,我们显然是用按位确定的思想
定义几个变量方便使用
cnt0cnt0cnt0表示AAA序列当前有多少个前缀最大值,cnt1cnt1cnt1表示BBB序列当前有多少个前缀最大值
mx0mx0mx0表示AAA序列当前的最大值,mx1mx1mx1表示BBB序列当前的最大值
对于第iii位的确定工作,先分析能对序列大小做出贡献的序列的性质
假设我们后面能分成两个前缀最大值序列CCC与DDD,满足siz(A)+siz(C)=siz(B)+siz(D)siz(A)+siz(C)=siz(B)+siz(D)siz(A)+siz(C)=siz(B)+siz(D),且满足ACACAC合并与BDBDBD合并后前缀最大值仍是前缀最大值,显然剩下的数总有方法填入的,故合法
分析序列CCC与DDD的性质
先找出原序列的所有前缀最大值,不妨设这个序列为EEE
给出结论就是C,DC,DC,D之中至少有一个序列满足是EEE的完全子集,证明考虑反证
即C,DC,DC,D中均存在至少一个数非原序列前缀最大值,则交换两数后C,DC,DC,D的前缀最大值个数均减少111,因为能制裁他们的都在对面的序列。连续做如上过程,我们总能使得其中至少一个序列成为EEE的完全子集
不妨枚举哪个序列成为了完全子集,以CCC为例
如果DDD序列中存在EEE的xxx个元素,存在非EEE序列中的mmm个元素,且第iii位之后存在TTT个EEE中的元素,我们可以列出方程
cnt0+T−x=cnt1+x+mcnt0+T-x=cnt1+x+mcnt0+T−x=cnt1+x+m
移项可知是
cnt0−cnt1+T=2∗x+mcnt0-cnt1+T=2*x+mcnt0−cnt1+T=2∗x+m
左边是常数,我们仅需要知道右边能构成这样的序列即可
将是EEE序列中的元素的权设为222,其他的元素权设为111,则我们需要知道一个上升序列且其权能够组成2∗x+m2*x+m2∗x+m
分奇偶讨论,我们发现如果一个数uuu能够组成,则u−2u-2u−2也能够组成
维护两个bitbitbit,支持最大值查询即可

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#include<map>
#include<bitset>
#include<set>
#define LL long long
#define mp(x,y) make_pair(x,y)
#define pll pair<long long,long long>
#define pii pair<int,int>
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int stack[20];
inline void write(int x)
{
	if(x<0){putchar('-');x=-x;}
    if(!x){putchar('0');return;}
    int top=0;
    while(x)stack[++top]=x%10,x/=10;
    while(top)putchar(stack[top--]+'0');
}
inline void pr1(int x){write(x);putchar(' ');}
inline void pr2(int x){write(x);putchar('\n');}
const int MAXN=200005;
int n;
int lowbit(int x){return x&-x;}
struct bittree
{
	int s[MAXN];
	void modify(int x,int c){for(;x<=n;x+=lowbit(x))s[x]=max(s[x],c);}
	int qry(int x){int ret=0;for(;x>=1;x-=lowbit(x))ret=max(ret,s[x]);return ret;}
}bi[2];
int L[MAXN],R[MAXN],a[MAXN];
int is[MAXN],sum;
int re[2][MAXN][20];
void rebuild(int i)
{
	int u=n-a[i]+1;
	for(int x=u,cnt=1;x<=n;x+=lowbit(x),cnt++)bi[0].s[x]=re[0][i][cnt];
	for(int x=u,cnt=1;x<=n;x+=lowbit(x),cnt++)bi[1].s[x]=re[1][i][cnt];
}
void getit(int i)
{
	int u=n-a[i]+1;
	for(int x=u,cnt=1;x<=n;x+=lowbit(x),cnt++)re[0][i][cnt]=bi[0].s[x];
	for(int x=u,cnt=1;x<=n;x+=lowbit(x),cnt++)re[1][i][cnt]=bi[1].s[x];
}
void init()
{
	int mx=0;
	for(int i=1;i<=n;i++)if(a[i]>mx)is[i]=1,mx=a[i],sum++;
	for(int i=n;i>=1;i--)
	{
		int u=n-a[i]+1;
		int u1=bi[0].qry(u-1),u2=bi[1].qry(u-1);
		if(is[i])u1+=2,u2+=2;
		else u1+=1,u2+=1;
		getit(i);
		bi[u1&1].modify(u,u1);bi[u2&1].modify(u,u2);
	}
}
int ans[MAXN];
int mx[2],cnt[2];
bool ok(int i,int o)
{
	cnt[o]+=(a[i]>mx[o]);
	int u=n-mx[o^1]+1,c1=bi[0].qry(u-1),c2=bi[1].qry(u-1);
	int cal=cnt[o]-cnt[o^1]+sum;
	cnt[o]-=(a[i]>mx[o]);
	if(cal>=0)
	{
		if((cal&1)&&cal<=c2)return true;
		if((!(cal&1))&&cal<=c1)return true;
	}
	int ls=mx[o];
	cnt[o]+=(a[i]>mx[o]);mx[o]=max(mx[o],a[i]);
	u=n-mx[o]+1,c1=bi[0].qry(u-1),c2=bi[1].qry(u-1);
	cal=cnt[o^1]-cnt[o]+sum;
	mx[o]=ls;cnt[o]-=(a[i]>mx[o]);
	if(cal>=0)
	{
		if((cal&1)&&cal<=c2)return true;
		if((!(cal&1))&&cal<=c1)return true;
	}
	return false;
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++)a[i]=read();
	init();
	for(int i=1;i<=n;i++)
	{
		rebuild(i);sum-=is[i];
		if(ok(i,0))ans[i]=0,cnt[0]+=(a[i]>mx[0]),mx[0]=max(mx[0],a[i]);
		else if(ok(i,1))ans[i]=1,cnt[1]+=(a[i]>mx[1]),mx[1]=max(mx[1],a[i]);
		else return puts("-1"),0;
	}
	for(int i=1;i<=n;i++)putchar(ans[i]+'0');
	puts("");
	return 0;
}
ADS(Arm Developer Suite)安装的坑! 实验课老师让我们区安装ADS,作为嵌入式开发的工具,原本以为这只是一个简单的软件,但是当我安装的时候,我才发现这软件太难了!安装了我大半天,看了其他的博客之后,最终才安装成功???????? 安装过程的一个巨坑就是:安装路径!以及安装许可注册文件 如果没有注意路径,最后安装成功以后打开软件就是蜜汁报错???? 报错了怎么办?删掉已安装的东西,重新安装吧,而且要删干净 再次安装的时候,打开安装包是这个提示... 阅读详情

相关推荐

高通量测序数据分析:RNA-seq

深度测序相关数据库与数据格式 SRA toolkit 一、NCBI 和EBI、DDBJ组成INSDC,数据内容相同所以找NCBI就行。 (一)NCBI常用数据库 GenBank:遗传序列数据库,收集了所有公开的DNA序列及其注释 GEO (Gene Expression Omnibus) :收集整理各种表达芯片数据,后来加入了甲基化、lncRNA、miRNA、CNV等其他芯片,还有高通量测序数据...

qq_41134363的博客 3万+

AGC028E High Elements

Solution 一道不错的题目。首先套路明显是逐位贪心。那么现在问题变成了如何判断一种方案是否可行。 定义原前缀最大值为在p中的前缀最大值。考虑这个题目的几个最重要的性质: 原前缀最大值一定任然是前缀最大值。 非原前缀最大值之所以能够成为新的前缀最大值,一定是因为他的“克星”在另一个序列中,也就是说,如果将这个数换到另一个序列中,那么他将不会成为前缀最大值。 那么所以,我们可以得到一些推论:...

Demon_Rieman的博客 739

Cadence OrCAD常见引脚错误排查指南:从原理图到封装的完整解决方案

本文详细解析Cadence OrCAD设计中常见的引脚错误问题,提供从原理图到封装的系统化解决方案。涵盖错误诊断、元件库修复、封装管理及自动化处理技巧,帮助工程师高效解决ORCAP-36022等典型错误,确保设计流程顺畅。

weixin_29294975的博客 255

[AGC028] E - High Elements 思维

Solution 考虑知道前面的一段后,怎么判断后面是否合法,这样就可以逐位确定。 先上一个结论:令mximx_imxi​为原序列111~iii的最大值所在位置,我们称原序列中每个mxi=imx_i=imxi​=i的位置为上升位,分割后的序列的新的上升位为新晋上升位,那么若存在一种合法方案,一定可以将其调整为其中一个序列中的所有上升位置都是原序列的上升位。 证明可以考虑若两个序列都存在新晋上升位,...

TYB的博客 697

Python爬虫实战:从巨潮资讯网高效获取结构化JSON数据

在数据采集与处理领域,网络爬虫是实现自动化信息获取的核心技术。其基本原理是通过模拟浏览器行为,向目标服务器发送HTTP请求并解析响应内容,从而提取所需数据。相较于传统的网页解析,直接获取结构化数据(如JSON格式)能极大提升数据处理的效率与准确性,避免了复杂的HTML解析或PDF文本提取过程。这一技术价值在金融数据分析、市场研究、舆情监控等场景中尤为突出,能够快速构建高质量的数据集。本文以Python爬虫为例,聚焦于从巨潮资讯网这类官方信息披露平台,精准定位并抓取JSON格式的上市公司年报数据,详细阐述了接

weixin_29243279的博客 1418

基于matlab实现的水果识别系统设计

本项目针对多种常见水果混合的图像,利用 Matlab 软件,对水果的识别进行研究。根据水果和背景的差别选取阈值,对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测,选定连通区域,标记后再对不同种水果的颜色,形状,大小等特征进行快速识别水果,从而实现对水果的正确分拣。:水果识别、MATLAB、数字图像处理。

热情、奔放、快乐编程! 4854

agc028E High Elements

agc028E High Elements 将一个长度为nnn的排列PiP_iPi​,将它分成两个序列AAA和BBB,使得A,BA,BA,B的前缀最大值个数相同。 设si=0s_i=0si​=0表示iii被分到AAA里,反之si=1s_i=1si​=1分到BBB里,求一个字典序最小的sss满足上面的条件。 n≤2e5n\le2e5n≤2e5 Solution 首先原排列的前缀最大值一定不管在哪个序列里都是前缀最大值。 我们将原本不是前缀最大值,在分到某个序列之后变成了前缀最大值的元素叫做**“新

Deep_Thinking的博客 217

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

AGC028E.High Elements

题目链接 题解 留坑待填。

sz_165394732的博客 239

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 105

AtCoder Grand Contest 028题解

C - Min Cost Cycle 思路好6啊,考试想了半天都没有想出来。 一直在想一个错误的贪心算法。 首先,我们把加一条权值为$min(Ax,By)$的边变成两条权值分别为$Ax,By$的边。 然后点就可以分成四类$(0,0),(0,1),(1,0),(1,1)$代表入边出边是否选自己的。 如果存在$(0,0)$,那么$(1,1)$个数一定和它相等。 并且我们发现$(0...

weixin_30307267的博客 204

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Atcoder agc028F

考虑从大往小枚举左上角(i,j)(i,j)(i,j),求出所有能到达的点的权值和sum[i][j]sum[i][j]sum[i][j]。 如果(i,j+1)(i,j+1)(i,j+1)和(i+1,j)(i+1,j)(i+1,j)中至多只有一个非障碍格子,那么容易计算。否则直接加上sum[i][j+1]sum[i][j+1]sum[i][j+1]和sum[i+1][j]sum[i+1][j]sum[...

mayaohua 834

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Atcoder agc028E

真神题,场上只过了2个,硬想了几个小时还是想出来了。 先考虑如何判断是否有解。 我们先观察一个合法的解具备的性质。我们称PPP中前缀的high位置为关键位。对于XXX和YYY分别的high位置,一定会包含所有关键位,反过来,如果我们钦定两个长度相等且不相交的上升子序列分别作为XXX和YYYhigh位置的集合,并且它们包含所有关键位,那么容易构造出sss。因此,我们只需要考虑钦定两个上升子序列UUU...

mayaohua 278

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

AGC028 B Removing Blocks 期望 逆元 前缀和

题目链接 题意: 给你n个数,现在有n次操作,每次操作选择一个未选择的数,然后加上从它到它后面最后一个连续没选过的数的权值和,并标记这个数为选过。我们发现,我们有n!中可能的操作,求这n!种操作得到的权值和的和。 题解: atcoder真的是好题无限啊!这题真不错,我一开始想这题算每一个数对答案的贡献,想尝试用组合数,发现做不出来。然后感慨这题似乎可以出成期望题啊,然后去看题解,发现真的是用期望做...

forever_shi的博客 626

【agc028E】High Elements(动态规划,线段树,贪心)

【agc028E】High Elements(动态规划,线段树,贪心) 题面 AtCoder 你有一个\([1,N]\)的排列\(P\)。 一个长度为\(N\)的字符串\(S\)是好的,当且仅当: 两个序列\(X,Y\)这样构造: 一开始,令\(X,Y\)都是空的。然后对于每一个\(i=1,2,...,N\),依次考虑每一个\(P_i\),如果\(S_i=0\),那么加入到\(X\)末尾,否则加...

weixin_30633949的博客 214

AGC 028

C 一道和以前做过的一道codeforces类似的题,但不大一样。 题意: 每个点两个权值L ,R, 要求把这些数排成一个环,相邻两点ab间的(处于逆时针方向的数为a)的代价为 min(L[a], R[b]), 求能构造的最小的环。 n 100000 这个题自己做出来的。 首先考虑 如果说能分解成多个环的话,我们一定可以构造一个方案使得权值和为所有L,R 从小到大排序的前n个数的权值和。 那么我们...

Fire Dancer 640

【AtCoder】AGC028 (A-E)题解

A - Two Abbreviations 如果有最小答案的话这个答案一定是N和M的lcm 我们考虑一下什么情况下 \(k \frac{L}{N} = h \frac{L}{M}\)且\(k,g\)互质 显然是在\(k = \frac{N}{gcd(N,M)},h = \frac{M}{gcd(N,M)}\)的时候成立 我们只要不断枚举\(k * i,h * i\)判断两个串里这个位置的...

weixin_30455365的博客 272

AGC 028E - High Elements

这题首先可以想到按位贪心, 高位尽可能填0。 但是如何判断能不能填0呢? 原序列的上升位在划分后肯定还是上升位。 但是因为划分成了两个序列,可能会有一些新晋上升位。 可以证明: 如果存在一种\(X\)串,\(Y\)串上升数相等的方案,那么,必定存在一种\(X\)中的上升全为原串中的上升,或\(Y\)中的上升全为原串中上升的划分。 因为考虑\(X,Y\)均有新晋上升位的话, 那么交换这两个位置,\(...

weixin_30819085的博客 158

AtCoder AGC028-F:Reachable Cells

越来越喜欢AtCoder了,遍地都是神仙题。 题意: 给定一个\(N\)行\(N\)列的迷宫,每一个格子要么是障碍,要么是空地。每一块空地写着一个数码。在迷宫中,每一步只允许向右、向下走,且只能经过空地。 对于每两个连通(从一个可到达另一个)的格子,求出它们数码的乘积。问所有这种乘积的和。 \(1 \leq N \leq 500\) 思路: 容易把到达关系建成一张DAG,我们要做的就只是:对每一个...

weixin_30709061的博客 355

ARC058 E Iroha and Haiku 状压dp

题目链接 题意: 你现在有n个数,每一个数可以填1到10中的任何一个数,求满足下列条件的序列数量:对于给定的X,Y,ZX,Y,ZX,Y,Z,当一个数组存在0&amp;lt;=x&amp;lt;y&amp;lt;z&amp;lt;w&amp;lt;=N0&amp;lt;=x&amp;lt;y&amp;lt;z&amp;lt;w&amp;lt;=N0&lt;=x&lt;y&lt;z&lt;w&

forever_shi的博客 405

【题解】AT4439:[AGC028E] High Elements

原题传送门 这题很难 因为要求输出的字典序最小,所以0优先 想到逐位确定的贪心思想:从第1位开始,先假设这一位是0,就把这个数放到xxx序列中,验证一下之后的数能否再合法,如果可以,就把这个数放到xxx序列,否则就只能放到yyy序列 逐位确定的复杂度是O(n)O(n)O(n) 所以要求我们在O(logn)O(logn)O(logn)时间内解决checkcheckcheck问题 先定义原序列中的上升位为“原上升位”,到新序列新产生的上升位(即本来不是上升位变成了上升位)为“新上升位” 结论1:原上升位到新的序

ModestCoder_的博客 518

AGC028 E - High Elements

AGC028 E - High Elements 有一个排列\(p\),你要分成两个子序列\(A,B\),满足\(A,B\)的LIS长度相等。设\(S\)是一个\(01\)序列,\(S_i=0\)当且仅当\(i\)被分到\(A\)中。求满足条件的字典序最小的\(S\)。 显然算法大约为贪心考虑每一位是否可以是\(0\)。 有一个结论: \(p\)上升点是\(p\)中lis中的点,上升点是指在这个...

weixin_30641999的博客 209

[bzoj3173][树状数组]最长上升子序列

Description 给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0&lt;=Xk&lt;=k-1,1&lt;=k&lt;=N) Output...

Rose_max的博客 1151

[bzoj2743][树状数组]采花

Description 萧芸斓是Z国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵。为此,公主每采一朵花,要么此前已采到此颜色

Rose_max的博客 557

[caioj1442][主席树][树状数组]第K大的数 II

【问题描述】 给n(1&lt;=n&lt;=50000)个数字,进行m(1&lt;=m&lt;=10000)次操作,有两种操作: Q l r k:询问l到r第k小的数。 C x k:改变第x个数的值为k。 【输入文件】 第一行为n和m。 接下来一行n个数。 接下来m行为m个操作。 【输出文件】 遇到Q操作就输出。 【输入样例】 5 3 ...

Rose_max的博客 457
上一篇: [Codeforces1153F][数论]Serval and Bonus Problem
下一篇: [ARC100-F][DP]Colorful Sequences
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值