# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1182708 | sleepntsheep | 역사적 조사 (JOI14_historical) | C++17 | 1 ms | 1040 KiB |
#include<stdio.h>
#include<string.h>
#include<algorithm>
int n,nq,x[100000],cr,bb[100000],xs[100000],freq[100000];
long long ans[100000],mx;
struct QUERY{
int l,r,i;
bool operator<(const QUERY&o)const{
if(bb[l]!=bb[o.l])return l<o.l;
return r<o.r;
}
}q[100000];
int main(){
scanf("%d%d",&n,&nq);
for(int i=0;i<n;++i)scanf("%d",&x[i]),bb[i]=i/500,xs[i]=x[i];
std::sort(xs,xs+n);
for(int i=0;i<n;++i)x[i]=std::lower_bound(xs,xs+n,x[i])-xs;
for(int i=0;i<nq;++i)scanf("%d%d",&q[i].l,&q[i].r),q[i].i=i,--q[i].l,--q[i].r;
std::sort(q,q+nq);
for(int i=0;i<nq;++i){
auto&[l,r,i_]=q[i];
if(!i||bb[l]!=bb[q[i-1].l]){
memset(freq,0,sizeof freq);
cr=0;
mx=0;
}
while(cr<r){
if(bb[cr]>bb[l]){
++freq[x[cr]];
if(freq[x[cr]]*1ll*xs[x[cr]]>mx)
mx=1ll*freq[x[cr]]*xs[x[cr]];
}
++cr;
}
long long mx_=mx;
for(int j=l;j<=cr&&bb[l]==bb[j];++j){
++freq[x[j]];
if(freq[x[j]]*1ll*xs[x[j]]>mx_)
mx_=1ll*freq[x[j]]*xs[x[j]];
}
for(int j=l;j<=cr&&bb[l]==bb[j];++j)
--freq[x[j]];
ans[i_]=mx_;
}
for(int i=0;i<nq;++i)printf("%lld\n",ans[i]);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |