首页 > 其他分享 >2023/2/4 考试总结

2023/2/4 考试总结

时间:2023-02-04 14:56:01浏览次数:57  
标签:总结 ch int tr pos ls 2023 now 考试

  • 树形数据结构专场也就是我的大型 GG 专场

  • 题单贴贴

T1.P4587 [FJOI2016]神秘数

  • 主席树/可持久化线段树;

  • 考试的时候怕调不出来,不是很敢写,然后还有性质分析得不是很清楚……于是 GG 了,还炫没了许多时间。结果 \(AC\) 代码意外的短。

  • 前置性质
    设当前数字集合 \(S\) 已经可以表示 \([1,pos]\) 里的所有数,\(pos+1\) 就是第一个不能被表示的数。当前有一些 \(a_i\) 需要插入其中。

    • 当 \(a_i> pos+1\) 时,显然,即使把 \(a_i\) 插入 \(S\),\(pos+1\) 这个数仍然不能被凑出来,所以 \(a_i\) 不会对 \(pos\) 产生贡献;
    • 当 \(a_i\le pos+1\) 时,插入 \(a_i\) 后就能表示 \([1,pos+a_i]\) 里的所有数;
  • 因此,问题转化为,从小到大向 \(S\) 里插入序列 \([l,r]\) 区间里的数,然后下一次可以插入的数范围在当前集合对应 \([1,pos+1]\) 中,也就是说,需要对区间求和。
    由于要求区间,考虑主席树。

  • 在值域建树,用主席树维护区间和。
    对于每次询问,从值域 \([1,1]\) 开始求解。

AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

const int N=1e5+10;

struct memr{
	int ls,rs;
	int sum;
}tr[N<<5];

int n,m,cnt=0;
int rt[N];

#define mid ((l+r)>>1)

void update(int &now,int p,int l,int r,int x){
	now=++cnt;
	tr[now].ls=tr[p].ls,tr[now].rs=tr[p].rs;
	tr[now].sum=tr[p].sum+x;
	if(l==r) return ;
	if(x<=mid) update(tr[now].ls,tr[p].ls,l,mid,x);
	else update(tr[now].rs,tr[p].rs,mid+1,r,x);
	return ;
}

int ask(int a,int b,int l,int r,int ql,int qr){
	if(tr[a].sum==tr[b].sum) return 0;
	if(ql<=l && r<=qr) return tr[b].sum-tr[a].sum;
	int ans=0;
	if(ql<=mid) ans+=ask(tr[a].ls,tr[b].ls,l,mid,ql,qr);
	if(mid<qr) ans+=ask(tr[a].rs,tr[b].rs,mid+1,r,ql,qr);
	return ans; 
}

int main(){
	n=read();
	int a;
	for(int i=1;i<=n;++i){
		a=read();
		update(rt[i],rt[i-1],1,1e9,a);
	}
	m=read();
	int l,r;
	while(m--){
		l=read(),r=read();
		int mx=0,pos=0;
		for(;;){
			int ans=ask(rt[l-1],rt[r],1,1e9,mx+1,pos+1);
			if(!ans) break;
			mx=pos+1;
			pos+=ans;
		}
		printf("%d\n",pos+1);
	}
	return 0;
} 

T2.P2497 [SDOI2012]基站建设

  • 凭什么 n≤1e5 O(n²) 的暴力只给 10 pts?凭什么??

标签:总结,ch,int,tr,pos,ls,2023,now,考试
From: https://www.cnblogs.com/Star-LIcsAy/p/17091471.html

相关文章

  • 2023 二月 做题记录
    2.3P3119首先有显然结论:在一个环上反走一定是不值的,因为环上的点本来就相互可达。缩点后建立正反图跑最短路,设正图最短路数组为\(dis1\),反图最短路数组为\(dis2\),对于......
  • QML(14)——QML与C++交互方式总结1/3(qml调用C++的public函数)
    一、效果qml文件中,可以调用C++类的公共函数   二、步骤1、C++类文件创建C++文件时,一定要勾选下面3项 MyQmlClass.h #ifndefMYQMLCLASS_H#defineMYQMLCL......
  • C++校园导游系统[2023-02-04]
    C++校园导游系统[2023-02-04]校园导游问题描述:用无向网表示校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径......
  • 2023牛客寒假算法基础集训营6
    2023牛客寒假算法基础集训营6AA直接判断#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintx;signedmain(){cin>>x;if(x<=7)......
  • 2023.02.04小记
    买到了想了很久的裙子今天加班,本来可以居家办公的,但是我选择来公司,溜溜我的新裙子和新小皮鞋旧图镇楼,2018年的我真好啊,这图还是当时的舍友帮我拍+P的当年的裙子今天......
  • C 阿宁的大背包【2023牛客寒假算法基础集训营6】
    C 阿宁的大背包原题链接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<......
  • G 阿宁的整数配对【2023牛客寒假算法基础集训营6】
    G 阿宁的整数配对原题连接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#includ......
  • A 阿宁的签到题【2023牛客寒假算法基础集训营6】
    A 阿宁的签到题原题链接代码点击查看代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include......
  • H 阿宁讨伐虚空【2023牛客寒假算法基础集训营6】
    H 阿宁讨伐虚空原题链接思路\(x≤L\)时,脆皮都死完了,虚空蛇肯定不会被打到。\(x>R\)时,脆皮怎么都死不玩,虚空蛇肯定会被打到。\(L≤x<R\)时,如果\(y\in[L,x)\),那么脆......
  • 2023牛客寒假算法基础集训营5 自卑赛
    题目地址A注意到可以将价值排序选择k个就可以前缀和来得到。如何快速得到当前元素排名可以离线所有的询问也可以直接在价值序列上二分,后者明显好写。B注意到如果n为......