Submission #11191

#TimeUsernameProblemLanguageResultExecution timeMemory
11191dohyun0324역사적 조사 (JOI14_historical)C++98
40 / 100
4000 ms11760 KiB
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
long long s2,f,w,dap,r,p,cnt,x,y,n,m,k,pos[100010],arr[100010],ch[100010],big;
struct data{
    long long x,y;
    bool operator<(const data&r)const{
        if(x==r.x) return y<r.y;
        return x<r.x;
    }
}imsi[100010];
long long b[400][400];
vector<long long>a[100010];
int main()
{
    long long i,j,s;
    scanf("%lld %lld",&n,&m);
    for(i=1;i<=n;i++){scanf("%lld",&arr[i]); imsi[i].x=arr[i]; imsi[i].y=i;}
    sort(imsi+1,imsi+n+1);
    for(i=1;i<=n;i++)
    {
        if(imsi[i].x!=imsi[i-1].x) cnt++;
        pos[cnt]=imsi[i].x; arr[imsi[i].y]=cnt; a[cnt].push_back(imsi[i].y);
    }
    k=sqrt(n);
    for(i=1;;i++){
        w=i-1; big=0; memset(ch,0,sizeof ch);
        if(k*(i-1)+1>n) break;
        for(j=k*(i-1)+1;j<=n;j++){
            ch[arr[j]]++;
            big=max(big,ch[arr[j]]*pos[arr[j]]);
            if(j%k==0){w++; b[i][w]=big;}
        }
        if(n%k!=0){w++; b[i][w]=big;}
    }
    p=i;
    for(i=1;i<=m;i++)
    {
        scanf("%lld %lld",&x,&y);
        f=(x-1)/k+2; r=(y-1)/k;
        dap=b[f][r];
        for(j=x;j<=(f-1)*k;j++)
        {
            if(j>y) break;
            s=upper_bound(a[arr[j]].begin(),a[arr[j]].end(),y)-lower_bound(a[arr[j]].begin(),a[arr[j]].end(),x);
            dap=max(dap,s*pos[arr[j]]);
        }
        for(j=r*k+1;j<=y;j++)
        {
            if(j<x) break;
            s=upper_bound(a[arr[j]].begin(),a[arr[j]].end(),y)-lower_bound(a[arr[j]].begin(),a[arr[j]].end(),x);
            dap=max(dap,s*pos[arr[j]]);
        }
        printf("%lld\n",dap);
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...