セグメント内の最大要素の合計 - セグメント内の最小要素の合計を見つける必要があるという問題を解決しています。 Sparse Table を使用してみましたが、時間制限が 2 つ遅いため、次のようなことをしました。これ:
n=4
セグメントが[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]
. この問題は RMQ の問題に似ていますが、すべてのセグメントに対して実行し、
sum=max(a[1],a[2])+
max(a[1],a[2],a[3])+max(a[1],a[2],a[3],a[4])+max(a[2],a[3])+max(a[2],a[3],a[4])+max(a[3],a[4])-min(a[1],a[2])+min(a[1],a[2],a[3])+min(a[1],a[2],a[3],a[4])+min(a[2],a[3])+min(a[2],a[3],a[4])+min(a[3],a[4])
for(i=1;i<n;i++)
{
maxtilli[i-1]=INT_MIN;
mintilli[i-1]=INT_MAX;
for(k=1,j=i;j<=n;k++,j++)
{
if(a[j]>maxtilli[k-1])
{
maxtilli[k]=a[j];
}
else
{
maxtilli[k]=maxtilli[k-1];
}
if(a[j]<mintilli[k-1])
{
mintilli[k]=a[j];
}
else
{
mintilli[k]=mintilli[k-1];
}
if(i!=j)
{
ans+=(maxtilli[k]-mintilli[k]);
}
}
}
ここでn
は 100,000 のオーダーです。それで、それを最適化する方法はありますか。
セグメントn=4
が であるとし[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]
ます。
必要な物は
sum=max(a[1],a[2])+max(a[1],a[2],a[3])+max(a[1],a[2],a[3],a[4])+max(a[2],a[3])+max(a[2],a[3],a[4])+max(a[3],a[4])-min(a[1],a[2])+min(a[1],a[2],a[3])+min(a[1],a[2],a[3],a[4])+min(a[2],a[3])+min(a[2],a[3],a[4])+min(a[3],a[4])