首页 > 其他分享 >AT_abc344_e的题解

AT_abc344_e的题解

时间:2024-03-27 12:37:36浏览次数:28  
标签:记录 int 题解 long abc344 400010

(一)

这次 ABC 有点水。

每个数记录前面那个数,和后面那个数。

对于每个数,开个数组记录值,用 map 记录一个值的位置

(二)

AC 代码。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int pre[400010],cnt,las[400010],a[400010],n,q;
map<int,int>mp;
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)scanf("%lld",&a[i]),mp[a[i]]=i;
	cnt=n+2;
	for(int i=1;i<=n;i++)pre[i]=i-1,las[i]=i+1;
	las[0]=1,pre[n+1]=n;
	scanf("%lld",&q);
	while(q--){
		int op,x,y;
		scanf("%lld%lld",&op,&x);
		if(op==2){
			int pos=mp[x];
			int l=pre[pos],r=las[pos];
			mp[x]=0;
			pre[r]=l,las[l]=r;
		}
		else{
			scanf("%lld",&y);
			int pos=mp[x];
			mp[y]=++cnt;
			a[cnt]=y;
			pre[cnt]=pos,las[cnt]=las[pos];
			las[pos]=cnt;pre[las[cnt]]=cnt;
		}
	}
	int now=las[0];
	while(now!=n+1){
		printf("%lld ",a[now]);
		now=las[now];
	}
	return 0;
}

标签:记录,int,题解,long,abc344,400010
From: https://www.cnblogs.com/Jh763878/p/18098696

相关文章

  • CF1923B的题解
    (一)注意到\(x_i\)的绝对值\(\len\)。那么统计每一个位置的血量和。先从靠近的击杀必定最优,剩余的子弹用\(sum\)存储。还是直接上代码吧。(二)AC代码。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intt,n,k,a[300010],dis[300010],s[300010];......
  • AT_abc344_c的题解
    (一)数据范围较小,三重循环枚举选的数,用map存储可能的和即可。(二)AC代码。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m,l,q,a[110],b[110],c[110];map<int,bool>mp;signedmain(){ scanf("%lld",&n); for(inti=1;i<=n;i++)scan......
  • CF1195D2的题解
    (一)虽说代码较长,但非常好理解,还是最优解(公开的就两个)。考虑对每个数单独算贡献,循环枚举与它进行运算的数的长度,然后确定那个数的位置即可,再乘以出现的数位对应的贡献,如出现在倒数第二位就乘\(10\)。难度应该不到绿。(二)AC代码。#include<bits/stdc++.h>#defineintlonglo......
  • AT_abc343_f的题解
    (一)F<E。显然是线段树,虽然分块也能过。每个线段树上的节点记录最大值,第二大值,最大值个数,第二大值个数。合并操作注意值相等的情况。(二)AC代码。赛事写得有点乱。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,q,a[400010];structnode{ int......
  • CF1676H2的题解
    (一)题意转化为求\(i<j\)且$a_j\lea_i$的有序对\((i,j)\)数。二维偏序,容易想到用树状数组或归并排序做。(二)AC代码(树状数组)。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,t,tree[200010],a[200010];intlowbit(intx){ returnx&-x;......
  • P10185的题解
    (一)考虑对每一种颜色单独求解。对于一次第\(k\)种的“循环”,美丽度会加上\[\sum_{i=1}^{a_k}C_{n}^{i}\timesv_k^{i}=(v_k+1)^{a_k}-1\]相信大家都学过二项式定理。“循环”次数取决于其他珠子是否出现,即\(2^{\sum_{i=1}^{a_i}-a_k}\)。再将两式相乘就愉快AC了。(二)警......
  • CF1904C的题解
    (一)不太好想。(我看了题解才会)当\(k>2\)时,可以选两次相同的\(i\)和\(j\)。再将生成的数做差。当\(k=1\)时,直接\(Θ(n^2)\)枚举。当\(k=2\)时,先枚举第一次的\(i\)和\(j\),再用lower_bound()实现查找第二次选择的数。时间复杂度\(Θ(n^2\log_2{n})\)。注......
  • CF1929C的题解
    (一)每次下注,要么赚\(y\times(k-1)\),要么亏\(y\)。由于不知道什么时候会输,每次都下能赚回前面所有的金额好了。第一次下\(1\),共下\(x+1\)次。(二)AC代码。#include<bits/stdc++.h>usingnamespacestd;intt,k,x,a;intmain(){ scanf("%d",&t); while(t--){ scan......
  • CF1213D1的题解
    (一)直接暴力!!!对于每一个数,枚举它能生成的数。然后对于每一个可能的答案,开长度为\(k\)的优先队列维护,同时统计操作次数和。时间复杂度为\(Θ(\log^2_2n)\)。惊讶地发现顺便把双倍经验给切了。(卡过)(二)AC代码。#include<bits/stdc++.h>usingnamespacestd;intcnt,n,k,su......
  • CF1922C的题解
    (一)从\(i\)到\(j\)有两种走法,一种是用\(a_j-a_i\)的代价,一种是用\(1\)的代价,前提是\(j\)是\(i\)最近的。显然如果符合条件选第二种。先考虑从左向右走。(和从右向左相同)考虑走到了节点\(i\),如果\(a_{i+1}-a_{i}>a_{i}-a_{i-1}\),那么花费\(1\)的代价向右走,否则花......