首页 > 其他分享 >2024.1.21模拟赛 B题解

2024.1.21模拟赛 B题解

时间:2024-01-21 21:11:22浏览次数:27  
标签:2024.1 return 21 int 题解 pos vis 模拟 dp

题目大意

思路

首先有一个50pts的网络流暴力

考虑按照\(dp\)值分层,发现在同一层内,随着\(i\)递增,\(a_i\)递减
由此可以进一步推出每一个点连接的出边,是下一层的一个区间,并且区间是单调的
于是可以线段树优化建边,拿到60pts

接着考虑模拟网络流,发现如果每次都选择第一条出边的话,就不会用到反悔边,于是直接模拟

code

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
int n,len,ans;
int a[N],b[N],pos[N],dp[N],vis[N],c[N];
vector<int> G[N];
int dfs(int x){
	if(vis[x]) return 0;
	vis[x]=1;
	if(dp[x]==len){
		ans++;return 1;
	}
	while(pos[dp[x]]<(int)G[dp[x]+1].size()&&G[dp[x]+1][pos[dp[x]]]<x) pos[dp[x]]++;
	while(pos[dp[x]]<(int)G[dp[x]+1].size()&&a[G[dp[x]+1][pos[dp[x]]]]>a[x]){
		int fl=dfs(G[dp[x]+1][pos[dp[x]]]);pos[dp[x]]++;
		if(fl) return 1;
	}
	return 0;
}
int lowbit(int x){
	return x&(-x);
}
void add(int x,int y){
	for(;x<=n;x+=lowbit(x)) c[x]=max(c[x],y);
}
int maxn(int x){
	int ans=0;
	for(;x;x-=lowbit(x)) ans=max(ans,c[x]);
	return ans;
}
int main(){
	freopen("lis.in","r",stdin);
	freopen("lis.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	sort(b+1,b+1+n);
	for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+n,a[i])-b;
	for(int i=1;i<=n;i++){
		dp[i]=maxn(a[i]-1)+1,len=max(len,dp[i]);
		G[dp[i]].push_back(i),add(a[i],dp[i]);
	}
	for(auto x:G[1]) dfs(x);
	printf("%d\n",n-ans);
	return 0;
}

标签:2024.1,return,21,int,题解,pos,vis,模拟,dp
From: https://www.cnblogs.com/hubingshan/p/17978381

相关文章

  • 初三选拔模拟赛题解
    目录T2T3T4T5T6T7给个正常的题解以正视听.不过说好的普及难度呢?如果有问题请指出.T2注意到答案一定可以取到最小区间的长度\(len\),一种方案是按\(0\dotslen-1\)循环填.T3大致有两种做法:维护每个手指的次数\(c_i\)和占用的键数\(t_i\),按\(\frac{c_i}{t_i+1}\)......
  • 2024-01-21 闲话
    chatwithyspmonwhateveryouwant!自主命题闲话确实有点消耗家底,尤其是对我这种没啥家底的人来说。所以能不能来和yspm聊天!想说什么说什么!在家的生活实在是太寂寞了,原先觉得GraphofThought是adaptive的,今天读了一下代码,发现不是adaptive的,幻想破灭的一集。去a......
  • 1.21 && 第二场模拟赛记
    写在前面:非常好模拟赛,9道题,3道不用写,三道原题,两道原题,一道东方题。根据等量代换可得有5道原题。t2原题CF740C赛时理解错题意了,具体咋想的我也忘了,但是我的构造方法是每个区间从0开始构造,如果不在区间内则任意输出。但是正解是找到最小区间然后按区间循环输出即可。......
  • 1.21闲话暨模拟赛题解
    未卜先知推歌:二重变革/洛天依,言和byDELA上午写了模拟赛,下午不给我发代码不让我改题不让我看题面,smjb模拟赛一共9道题,4道原题(2道原题,2道"原"题),抛去3道不写的一共6道题T1「尘世闲游」(原神题)没让写T2「一心净土」(原神题&&原题「CF740C」)题解我这里一共找到......
  • CF1375B Neighbor Grid 题解
    题意简述给你一个$n$行$m$列的矩阵,要求你让这个矩阵是“完美”的。“完美”的定义如下:若当前的格子里是一个正整数$k$,那么与这个网格相邻(有公共边)的$k$个格子也必须有一个正整数。若当前的格子里是$0$,那么不受上述的限制。你可以对任意的一个格子加上$1$,次数......
  • P5362 [SDOI2019] 连续子序列 题解--zhengjun
    题面传送门提供一种和其他题解完全不同的解法。记\(P_0\)为题中给出的序列,\(P_1\)为\(P_0\)取反的结果。记\(S_{l\simr}\)表示\(S_lS_{l+1}\dotsS_{r}\)。方便起见,\(P\)下标从\(0\)开始,其余的串都是从\(1\)开始。这里用\(P_{0,i}=\operatorname{popcount(i)}......
  • Github图床搭建,结合Picgo与jsdelivr的免费cdn加速,以及部分问题解决方案
    留份文档,便于后续查询===================用到的地址:Github:GitHubPicgo:PicGoisHere|PicGojsdelivr加速地址:https://cdn.jsdelivr.net/gh/Github用户名/仓库名@master===================1.创建一个GitHub仓库:进入你的GitHub首页,在右上角你会找到一个➕,在下拉菜单中......
  • P7192 [COCI2007-2008#6] GEORGE 题解
    题目简述给定一张$n$个点$m$条边的无向图,从$u_i\rightarrowv_i$需要用时$w_i$分钟。有一位T先生从$0$时刻按有$g$个点的序列顺序移动,即$v_1\rightarrowv_2\rightarrow\cdots\rightarrowv_g$。还有一位卡车司机Luka从$k$时刻开始从$a$点出发,Luka不......
  • 1.21寒假每日总结12
    思路&&Code12345678910111213141516171819202122232425262728293031323334353637/*高桥和青木N场比赛x      y得分情况分别为x1y1              ...                ..  ......
  • 学习笔记-24.1.21
    因此,当您在null引用上访问字段mingcheng时,它们不会被解析。相反,您应该首先创建一个对象并将其放入数组中。因此修改代码如下Pd[]pdd=newPd[20];for(inti=0;i<20;i++){Pdpd=newPd();pdd[i]=pd;} ......