【发布时间】:2020-02-18 04:10:11
【问题描述】:
给定一个数组,我们需要在 l 到 r 范围内为多个查询找到最长的连续子数组。例如,ar[] = {1,2,2,2,4,3,1,1,3}。
查询 1:l=1,r=5,元素=2,输出为 3
查询 2:l=1,r=5, element=1, 输出为 1
查询 3:l=6,r=9, element=3, 输出为 1
查询 4:l=6,r=9, element=1, 输出为 2
我可以运行从 l 到 r 的循环并计算给定元素在该范围内的最长连续出现,但我需要更好的方法。 约束是 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
ll i,j,k,m,n,l,r,x;
n=9;
ll ar[n]={1,2,2,2,4,3,1,1,3};
ll query=4;//number of queries
while(query--)
{
cin>>l>>r>>x;
l--;r--;//changing to 0-based indexing
ll ctr=0;
ll ans=0;
for(i=l;i<=r;i++)
{
if(ar[i]==x)
{
ctr++;
}
else ctr=0;
ans=max(ctr,ans);
}
cout<<ans<<endl;
}
}
【问题讨论】:
-
这不是问题,是命令。
-
引用:“可以运行循环......但我需要更好的方法。”你是怎么得出这个结论的?
-
“我可以运行从 l 到 r 的循环并计算给定元素在该范围内的最长连续出现”,请显示该代码,理想情况下为 minimal reproducible example。 “但我需要更好的方法”,为什么?这是因为How to Ask。
-
我已按要求添加了之前的代码。
标签: c++ arrays algorithm data-structures segment-tree