我的程序只能过5个点!!
Program life;
Var
int: array[0..2500] Of integer;
out: array[1..3] Of int64;
i,j,n,ans: longint;
Procedure work(deep,sta:longint);
Var
i: longint;
Begin
If deep=3 Then
Begin
inc (ans);
exit;
End; {end if exit}
For i:=sta To n Do
If int[i]<int[sta-1] Then
Begin
inc (deep);
out[deep] := int[i];
work(deep,i+1);
dec (deep);
End; {di gui}
End; {pro}
Begin
readln (n);
For i:=1 To n Do
read (int[i]);
For i:=1 To n-2 Do
Begin
out[1] := int[i];
work (1,i+1);
End;
writeln (ans);
End.
var
a:array[1..2500] of longint;
i,j,k,n:longint;
zong:longint;
begin
read(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n-2 do
for j:=i+1 to n-1 do
if (a[i]>a[j]) then
begin
for k:=i+2 to n do
if a[j]>a[k] then inc(zong);
end;
writeln(zong);
end.
你还没有我对的多!!!!!!!!!!!
AC的大牛们啊!!救救我!!!!!!
二元组有经典算法(自己搜),三元组只要稍稍改一下:
核心代码:
void sort(int x1,int y1,int x2,int y2)
{
int p[10001],flag[10001],i,j,f1=x1,f2=x2;
for (i=x1;i<=y2;i++)
{
if ( f1<=y1 && f2<=y2 )
{
if ( a[f1]>a[f2] )
{
p[i]=a[f1];
flag[i]=add[f1];
out[add[f1]]=out[add[f1]]+(y2-f2+1);
for (j=f2;j<=y2;j++)
in[add[j]]=in[add[j]]+1;
f1++;
}
else
{
p[i]=a[f2];
flag[i]=add[f2];
f2++;
}
}
else
{
if ( f1<=y1 )
{
p[i]=a[f1];
flag[i]=add[f1];
f1++;
}
else
{
p[i]=a[f2];
flag[i]=add[f2];
f2++;
}
}
}
for (i=x1;i<=y2;i++)
{
a[i]=p[i];
add[i]=flag[i];
}
}
void pai(int x,int y)
{
int mid;
if ( x==y )
{
return;
}
else
{
mid=(x+y)/2;
pai(x,mid);
pai(mid+1,y);
sort(x,mid,mid+1,y);
}
}