题解:CF2009G1 Yunlis Subarray Queries (easy version)

news/2024/10/3 18:55:41

题目要求 \(a_i=a_{i-1}+1\),设 \(b_i=a_i-i\),如果 \(b_i=b_j\),那么 \(i\)\(j\) 就在正确的相对位置上。这应该很好理解吧,\(a\) 是一个公差为 \(1\) 的等差数列,下标也是一个公差为 \(1\) 的等差数列,对应位置相减就相等了。

我们在输入 \(a_i\) 的时候减去 \(i\),然后用滑动窗口维护每个区间内出现最多的元素次数即可。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,k,qq;
int a[N],f[N]; 
int l,r;
void solve(){memset(a,0,sizeof a);memset(f,0,sizeof f);cin>>n>>k>>qq;for(int i=1;i<=n;i++){cin>>a[i];a[i]=a[i]-i;}multiset<int> q; map<int,int> h;for(int i=1;i<=n;i++){int v=h[a[i]]++;if(q.find(v)!=q.end()){q.erase(q.find(v));}q.insert(v+1);if(i>=k){f[i]=*q.rbegin();int w=h[a[i-k+1]]--;q.insert(w-1);if(q.find(w)!=q.end()){q.erase(q.find(w));}}}while(qq--){cin>>l>>r;int ans=k-f[r];cout<<ans<<'\n';}
}
int main(){int t;cin>>t;while(t--){solve();}return 0;
}

也可以用莫队维护这个值:

#include<bits/stdc++.h>
using namespace std;
void solve(){int n,k,m;cin>>n>>k>>m;vector<int>a(n+1),bel(n+1);int tot=sqrt(n);for(int i=1;i<=n;i++){cin>>a[i];a[i]-=i;bel[i]=i/tot;}vector<vector<int>>q(m+1,vector<int>(3));for(int i=1;i<=m;i++){cin>>q[i][0]>>q[i][1];q[i][2]=i;}sort(q.begin()+1,q.end(),[&](auto &x,auto &y){if(bel[x[0]]!=bel[y[0]])return bel[x[0]]<bel[y[0]];if(bel[x[0]]&1) return x[1]<y[1];return x[1]>y[1];});vector<int> cnt(2*n+1,0);vector<int> sum(n+1,0);int mx=0;auto add=[&](int x){cnt[a[x]+n]++;sum[cnt[a[x]+n]]++;if(cnt[a[x]+n]>mx)mx=cnt[a[x]+n];};auto del=[&](int x){if(cnt[a[x]+n]==mx){if(sum[cnt[a[x]+n]]==1) mx--;}sum[cnt[a[x]+n]]--;cnt[a[x]+n]--;};vector<int>ans(m+1);int l=1,r=0;for(int i=1;i<=m;i++){while(q[i][0]<l) add(--l);while(q[i][1]>r) add(++r);while(q[i][0]>l) del(l++);while(q[i][1]<r) del(r--);ans[q[i][2]]=q[i][1]-q[i][0]+1-mx;}for(int i=1;i<=m;i++)cout<<ans[i]<<"\n";
}
int main(){int t;cin>>t;while(t--) solve();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

一些数学知识题

欧几里得算法费马小定理 当a,p都是是质数时,a^(p-1)=1(mod p) 证明: 举个例子 a=2,p=5; 1,2,3,4 集合(1) {1,2,3,4...,(p-1)} 2,4,6,8 => %5 => 2,4,1,3 集合(2) {1a%p,2a%p,3a%p,4a%p...,(p-1)a%p} 我们发现{1,2,3,4}和{2,4,1,3}只是…

题解:洛谷P2339 [USACO04OPEN] Turning in Homework G

题目链接:洛谷P2339 [USACO04OPEN] Turning in Homework G 首先我们考虑如何处理到达给定时间后才能交作业这一限制。其实在生活中,我们一般只会考虑什么时候交作业截止 (除了某些卷王),这样我们只用考虑如何在最大结束时间之前交作业,而不是在所有作业都没开始交之前考虑…

独立站如何批量查收录,教你独立站如何批量查收录的简单方法

独立站批量查收录是提升网站SEO效果的重要步骤。以下提供几种简单且实用的方法,帮助你高效地批量查询独立站的收录情况: 一、使用搜索引擎的Site指令结合自动化脚本 了解Site指令: 在搜索引擎(如谷歌)的搜索框中输入“site:域名”(替换为你的实际域名),执行搜索后,可以…

谷歌收录查询工具,告诉你谷歌收录查询工具使用指南

谷歌收录查询工具是网站管理员和SEO专家用于监控和管理网站在谷歌搜索结果中表现的重要工具。以下是一份详细的谷歌收录查询工具使用指南,旨在帮助你更好地了解和使用这些工具。 一、Google Search Console(谷歌搜索控制台) Google Search Console是谷歌官方提供的免费工具,…

『模拟赛』多校A层冲刺NOIP2024模拟赛01

『模拟赛记录』多校A层冲刺NOIP2024模拟赛01Rank 打得还可以总A. 构造字符串 签,但是挂了 40pts。 发现判条件只有相等和不相等,于是想到并查集维护连通块,将强制相同的两个位置的连通块合并,强制不同的先记下,最后统一判断。 重点在细节处理,合并连通块时要将位置靠后的…

虚拟机类加载机制

1. 类加载时机 一个类型(接口/类)从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将历加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。 加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,…

CSS display属性 inline-block flex grid

CSS display inline-block flex grid ======================================= CSS的display属性是一个核心属性,用于控制元素如何在页面布局中显示,包括其盒模型的行为。以下是display属性的一些常见值及其示例代码:1. block 说明:将元素变为块级元素,独占一行,可以…

[39] (多校联训) A层冲刺NOIP2024模拟赛01

你们不感觉最近机房网越来越慢了吗,现在下个 10M 的东西要用三分钟,而且期间访问不了网站 整个机房分 1000Mbps 的带宽为啥只能分这么一点, huge 拿我电脑挖矿了? 本来以为多校就是多校的,结果是真的多校,一百一十多个人在一块考 huge: 参加的都是咱们北方这几个强校 你说…