• 一个没调好的程序


      1 program rrr(input,output);
      2 type
      3   treetype=record
      4      l,r,d:longint;
      5      xy,x,y,x2,s,t:int64;
      6   end;
      7 var
      8   a:array[0..400040]of treetype;
      9   x,y,s1,s2:array[0..100010]of int64;
     10   j,s,t,sx,sy,sxy,sx2:int64;
     11   n,m,i,opt,l,r:longint;
     12 procedure build(k,l,r:longint);
     13 var
     14   mid,i:longint;
     15 begin
     16    a[k].l:=l;a[k].r:=r;a[k].d:=0;a[k].s:=0;a[k].t:=0;
     17    if l=r then begin a[k].x:=x[l];a[k].y:=y[l];a[k].xy:=x[l]*y[l];a[k].x2:=x[l]*x[l];exit; end;
     18    mid:=(l+r)>>1;i:=k+k;
     19    build(i,l,mid);build(i+1,mid+1,r);
     20    a[k].x:=a[i].x+a[i+1].x;a[k].y:=a[i].y+a[i+1].y;a[k].xy:=a[i].xy+a[i+1].xy;a[k].x2:=a[i].x2+a[i+1].x2;
     21 end;
     22 procedure pushdown(k:longint);
     23 var
     24   i:longint;
     25 begin
     26    if a[k].l=a[k].r then exit;
     27    if (a[k].d=0) and (a[k].s=0) and (a[k].t=0) then exit;
     28    if a[k].d=1 then
     29       begin
     30          i:=k+k;a[i].x:=s1[a[i].r]-s1[a[i].l-1];a[i].y:=a[i].x;a[i].x2:=s2[a[i].r]-s2[a[i].l-1];a[i].xy:=a[i].x2;a[i].d:=1;a[i].s:=0;a[i].t:=0;
     31          inc(i);a[i].x:=s1[a[i].r]-s1[a[i].l-1];a[i].y:=a[i].x;a[i].x2:=s2[a[i].r]-s2[a[i].l-1];a[i].xy:=a[i].x2;a[i].d:=1;a[i].s:=0;a[i].t:=0;
     32          a[k].d:=0;
     33       end;
     34    if (a[k].s=0) and (a[k].t=0) then exit;
     35    i:=k+k;j:=a[i].r-a[i].l+1;
     36    a[i].x2:=a[i].x2+2*a[k].s*a[i].x+s*s*j;a[i].xy:=a[i].xy+a[k].s*a[i].y+a[k].t*a[i].x+s*t*j;
     37    a[i].x:=a[i].x+j*a[k].s;a[i].y:=a[i].y+j*a[k].t;inc(a[i].s,a[k].s);inc(a[i].t,a[k].t);
     38    inc(i);j:=a[i].r-a[i].l+1;
     39    a[i].x2:=a[i].x2+2*a[k].s*a[i].x+s*s*j;a[i].xy:=a[i].xy+a[k].s*a[i].y+a[k].t*a[i].x+s*t*j;
     40    a[i].x:=a[i].x+j*a[k].s;a[i].y:=a[i].y+j*a[k].t;inc(a[i].s,a[k].s);inc(a[i].t,a[k].t);
     41    a[k].s:=0;a[k].t:=0;
     42 end;
     43 procedure change1(k:longint);
     44 var
     45   mid,i:longint;
     46 begin
     47    pushdown(k);
     48    if (l<=a[k].l) and (a[k].r<=r) then
     49       begin
     50          j:=a[k].r-a[k].l+1;
     51          a[k].x2:=a[k].x2+2*s*a[k].x+s*s*j;a[k].xy:=a[k].xy+s*a[k].y+t*a[k].x+s*t*j;
     52          a[k].x:=a[k].x+j*s;a[k].y:=a[k].y+j*t;a[k].s:=s;a[k].t:=t;
     53          exit;
     54       end;
     55    mid:=(a[k].l+a[k].r)>>1;i:=k+k;
     56    if l<=mid then change1(i);
     57    if mid<r then change1(i+1);
     58    a[k].x:=a[i].x+a[i+1].x;a[k].y:=a[i].y+a[i+1].y;a[k].xy:=a[i].xy+a[i+1].xy;a[k].x2:=a[i].x2+a[i+1].x2;
     59 end;
     60 procedure change2(k:longint);
     61 var
     62   mid,i:longint;
     63 begin
     64    pushdown(k);
     65    if (l<=a[k].l) and (a[k].r<=r) then
     66       begin
     67          a[k].x:=s1[a[k].r]-s1[a[k].l-1];a[k].y:=a[k].x;a[k].x2:=s2[a[k].r]-s2[a[k].l-1];a[k].xy:=a[k].x2;a[k].d:=1;
     68          j:=a[k].r-a[k].l+1;
     69          a[k].x2:=a[k].x2+2*s*a[k].x+s*s*j;a[k].xy:=a[k].xy+s*a[k].y+t*a[k].x+s*t*j;
     70          a[k].x:=a[k].x+j*s;a[k].y:=a[k].y+j*t;a[k].s:=s;a[k].t:=t;
     71          exit;
     72       end;
     73    mid:=(a[k].l+a[k].r)>>1;i:=k+k;
     74    if l<=mid then change2(i);
     75    if mid<r then change2(i+1);
     76    a[k].x:=a[i].x+a[i+1].x;a[k].y:=a[i].y+a[i+1].y;a[k].xy:=a[i].xy+a[i+1].xy;a[k].x2:=a[i].x2+a[i+1].x2;
     77 end;
     78 procedure query(k:longint);
     79 var
     80   mid:longint;
     81 begin
     82    pushdown(k);
     83    if (l<=a[k].l) and (a[k].r<=r) then
     84       begin inc(sx,a[k].x);inc(sy,a[k].y);inc(sx2,a[k].x2);inc(sxy,a[k].xy);exit; end;
     85    mid:=(a[k].l+a[k].r)>>1;
     86    if l<=mid then query(k+k);
     87    if mid<r then query(k+k+1);
     88 end;
     89 begin
     90    assign(input,'relative.in');assign(output,'relative.out');reset(input);rewrite(output);
     91    readln(n,m);
     92    for i:=1 to n do read(x[i]);for i:=1 to n do read(y[i]);
     93    build(1,1,n);
     94    s1[0]:=0;s2[0]:=0;j:=0;while j<n do begin inc(j);s1[j]:=s1[j-1]+j;s2[j]:=s2[j-1]+j*j; end;
     95    for i:=1 to m do
     96       begin
     97          read(opt,l,r);
     98          if opt=1 then
     99             begin
    100                sx:=0;sx2:=0;sy:=0;sxy:=0;query(1);
    101                j:=r-l+1;writeln(sx,' ',sy,' ',sx2,' ',sxy);//writeln((j*sxy-sx*sy)/(j*sx2-sx*sx):0:10);
    102             end
    103          else begin readln(s,t);if opt=2 then change1(1) else change2(1); end;
    104       end;
    105    close(input);close(output);
    106 end.
  • 相关阅读:
    除法
    01.python对象
    00.基础入门
    00.斐波那契数列第n项
    16.分治排序
    15.快速排序
    14.插入排序--希尔排序(缩小增量排序)
    13.插入排序--直接插入排序(简单插入排序)
    12.选择排序
    11.冒泡排序
  • 原文地址:https://www.cnblogs.com/Currier/p/6706896.html
Copyright © 2020-2023  润新知