暑假集训CSP提高模拟16

news/2024/11/18 11:44:11/文章来源:https://www.cnblogs.com/zhengchenxi/p/18349428

1.九次九日九重色

一开始做的时候被题面给迷惑住了,没想到可以跳着 匹配(样例太水)。
那我们来考虑如何做,首先思路肯定是把能匹配的暴力求出来,根据不知道怎么搞的调和计数,这样的复杂度还不是很高,是\(O(NlogN)\),可以搞。
观察一下预处理出来的序列,是不是很熟悉。没错剩下的就是求最长上升子序列。

那求最长上升子序列有两种方法,一个是\(O(n^2)\)的DP,还有一个\(O(NlogN)\)的二分。
这里主要了解后面的(因为赛时我还不会)。
原理其实比较简单,看代码就能看懂。

点击查看代码
#include<bits/stdc++.h>
using namespace std;const int N=2e5+107;int n;
struct lmy
{int x,y;
}a[N];
bool comp(lmy a,lmy b)
{return a.x<b.x;
}
int s[N],tp;int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&a[i].x,&a[i].y);}sort(a+1,a+1+n,comp);for(int i=1;i<=n;i++){if(s[tp]<a[i].y) s[++tp]=a[i].y;else{s[lower_bound(s+1,s+1+tp,a[i].y)-s]=a[i].y;}}printf("%d",tp);
}

2.天色天歌天籁音

简单理解一下题意,再自己手模一下,可以发现题目所求的是区间众数,然后它强调了一下各个互不影响,可以考虑莫队(其实挺套路的,但我不会莫队了,大悲)。
主要讲讲add和del的操作,
首先add比较好说,只需要直接计数。

del就需要分讨一下。
1.减之前比目前最大众数小,无影响。
2.本身是最大众数,减完之后还是,无影响。
3.本身为最大众数(但众数有很多个),减之后不为最大众数(主要的问题)。

关于这个问题,我们就可以开一个桶来记录每个数出现个数(众数)的个数(是有点绕,得理解一下),到这这个题就没什么了

点击查看代码
#include<bits/stdc++.h>
using namespace std;const int N=3e5+107;
int n,m,a[N];int li[N],ri[N],bg[N],tot;
struct lmy
{int x,y,id;
}q[N];
bool comp(lmy &a,lmy &b)
{int p=bg[a.x],q=bg[b.x];if(p!=q) return p<q;if(p&1) return a.y<b.y;else return a.y>b.y;
}void fk()
{int sq=sqrt(n);for(int i=1;i<=sq;i++){li[i]=ri[i-1]+1;ri[i]=sq*i;if(i==sq) ri[i]=n;for(int j=li[i];j<=ri[i];j++) bg[j]=i;}
}map<int,int> mp;int sum,t[N],cnt[N],ans[N];
void add(int i)
{t[cnt[a[i]]]--;t[++cnt[a[i]]]++;sum=max(sum,cnt[a[i]]);
}void del(int i)
{t[cnt[a[i]]]--;if(cnt[a[i]]==sum&&!t[cnt[a[i]]]) sum--;t[--cnt[a[i]]]++;
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) {scanf("%d",&a[i]);if(mp.find(a[i])==mp.end()){mp[a[i]]=++tot;}a[i]=mp[a[i]];}fk();for(int i=1;i<=m;i++){int l,r;scanf("%d%d",&l,&r);q[i]={l,r,i};}sort(q+1,q+1+m,comp);int l=1,r=0;for(int i=1;i<=m;i++){while(r<q[i].y) add(++r);while(r>q[i].y) del(r--);while(l<q[i].x) del(l++);while(l>q[i].x) add(--l);ans[q[i].id]=sum;}for(int i=1;i<=m;i++) printf("%d\n",-ans[i]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 编译 openssl + libcurl libcurl库

主要参考https://blog.icrystal.top/archives/11.html openssl编译 网址: https://www.openssl.org/source 下载的是 3.0.13 版本的 这边是说Perl:需要 Perl 来运行 OpenSSL 的构建脚本。你可以从 Strawberry Perl 或 ActivePerl 下载并安装 Perl。 NASM(可选):如果你要编…

运算符续集

1.扩展增值运算符 ** 省略了一些加减删除的步骤而直接运算的运算符**2.面试题 区分""+a+b和a+b+""3.条件运算符(必须掌握) 如果符合条件x则输出y,否则输出z

使用wsl,windows自带的linux虚拟机

右键,管理员模式 第一次安装,先更新一下wsl组件wsl --update wsl --status 是否为2,不是的话需要设置一下

微信小程序-如何解决onShareAppMessage转发gif格式图片不展示?【亲测有效】

1、开发小程序过程中,如果使用gif,在微信开发者工具中是可以正确显示图片的,但是发布之后,在真机上体验就不行了,无法显示分享的图片,对方也无法看到图片。 2、查看文档,发现微信小程序分享的时候,自定义的图片类型只支持:PNG,JPG。不能支持,gif。 3、如何解决呢?机…

代码随想录算法训练营第64天 | 图论:Floyd 算法+A * 算法

97.小明逛公园 https://kamacoder.com/problempage.php?pid=1155 Floyd 算法精讲 https://www.programmercarl.com/kamacoder/0097.小明逛公园.html#floyd-算法精讲Floyd 算法精讲问题总结:双向道路;路径规划;多个起点到多个终点核心思想:动态规划确定dp数组和下标含义:g…

yum 安装软件 遇到问题

1 某个源可能有问题时 可尝试的方法 2

信息,信息化,信息系统基础

信息基础 信息的特征普遍性、客观性、无限性、动态性、相对性、依附性、变换性、传递性、层次性、系统性、转化性。信息的质量属性精确性:指对事物状态描述的精准程度。 完整性:指对事物状态描述的全面程度。 可靠性:指信息的来源、采集方法、传输过程是可以信任的、符合预期…

GPU-Burn压力测试

gpu-burn压力测试 1.CentOS 1.查看内核版本和CentOS系统 版本: uname -a cat /etc/centos-release2.查看服务器上是否有NVIDIA GPU: lspci | grep NVIDIA /sbin/lshw -c display3.如果系统安装时没有选择安装开发工具,则安装一下gcc、kernel-devel等以及相关依赖包 sudo yum…

安规测试-漏电流测试

一、什么是漏电流 当电流经过绝缘体后溢出,称为漏电流。当漏电流经过人体流向大地时,就会产生电气伤害。漏电流测试与耐压测试、接地保护测试的不同处,在设备工作状态下做测试。漏电流测试中会加上一个人体模拟阻抗电路,可模拟在真实情况下经过人体的漏电流大小。 二、漏电…

再来一瓶皇帝

本故事经过了适当的艺术加工 一 前景:再来一瓶 曾几何时,拧瓶盖比赛风靡全球,比赛的具体内容就是在考场上拧若干个瓶盖,瓶盖上有概率写着 “再来一瓶”,谁拧出来的 “再来一瓶” 最多,谁就理所当然地是那个胜利者。这样的奇怪小游戏越传越广,直到最后,全球各个国家都建…

分页:Paginator

提要:列表分页主要是明白:列表当前需要显示内容索引 =(列表当前页数-1)*每页显示条数 至 列表当前页数*每页显示条数 一、Django的内置分页Django内置的分页需要使用到3个类:Paginator、EmptyPage、PageNotAnInteger 1.1 Paginator介绍paginator = Paginator(全部数据,…

安规测试-接地电阻测试

一、什么是接地阻抗 接地阻抗是描述电流由接地装置流入带保护外壳处,再流到大地所遇到的阻值,它包括了设备的接地金属外壳、接地线和接地体本身。 二、接地阻抗测试的主要目的 为确定被测物在故障的情况之下,安全接地线是否能承担故障电流的流量,接地的电阻值必须越低越好。…