k+1]+c[ck] div 10;
c[ck]:=c[ck] mod 10;
end;
x:=0;
ek:=ck;
for j:=ck downto 1 do
begin
e[j]:=(x*10+c[j]) div b[i];
x:=(x*10+c[j]) mod b[i];
end;
while (e[ek]=0) and (ek>1) do
dec(ek);
if da then
begin
ansk:=ek;
for j:=1 to ansk do
ans[j]:=e[j];
end;
end;
for i:=ansk downto 1 do
write(ans[i]);
end.
#include
#include
#include
#include
#define N 100005 #define INF 2000000000000ll using namespace std; typedef long long LL; int pos[N],H[N],first[N],second[N],w[N][18]; LL A[N][18],B[N][18],disA,disB,S; int n,i,Q,X,ans,now; double temp,Div;const double eps=1e-10; struct MM { int x,id,L,R; friend inline int operator <(const MM &A,const MM &B){return A.x
0) w[i][j]=w[w[i][j-1]][j-1]; } void Init_dis() { for (int i=1;i<=n;i++) { if (w[i][0]>0) A[i][1]=abs(H[i]-H[w[i][0]]); if (w[i][0]>0&&w[i][1]>0) B[i][1]=abs(H[w[i][0]]-H[w[i][1]]); } for (int j=2;j<=17;j++) for (int i=1;i<=n;i++) { A[i][j]=A[i][j-1]; if (w[i][j-1]>0) A[i][j]+=A[w[i][j-1]][j-1]; B[i][j]=B[i][j-1]; if (w[i][j-1]>0) B[i][j]+=B[w[i][j-1]][j-1]; } } inline void find(int start,LL cnt) { disA=disB=0; for (int i=17;i;i--) if (w[start][i]>0&&A[start][i]+B[start][i]<=cnt) { cnt-=A[start][i];cnt-=B[start][i]; disA+=A[start][i];disB+=B[start][i]; start=w[start][i]; } if (second[start]>0&&abs(H[second[start]]-H[start])<=cnt) disA+=abs(H[second[start]]-H[start]); } int main() { scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i].x),H[i]=a[i].x,a[i].id=i; Init_order(); Init_where(); Init_dis(); scanf("%I64d",&S);ans=0;Div=INF+1; for (i=1;i<=n;i++) { find(i,S); if (disB==0) temp=INF;else temp=disA*1./disB; if (fabs(temp-Div)<=eps) {if (H[i]>H[ans]) ans=i;} else if (temp