zoukankan      html  css  js  c++  java
  • bzoj2131

    首先不难想到对t排序,有f[i]=max(f[j])+v[i] tj<=ti且abs(pi-pj)/2<=ti-tj;
    要想优化,肯定从优化转移入手
    先去绝对值,当pi>=pj时,可得2ti-pi>=2tj-pj
    当pi<pj,可得2ti+pi>=2tj+pj; 这样两个式子的两边完全只和当前状态有关系
    由于上面是等价变换,所以当同时满足2ti+pi>=2tj+pj和2ti-pi>=2tj-pj可得到tj<=ti且abs(pi-pj)/2<=ti-tj;
    这就变成了求一个点左下方的点(包括边界)的点权最大值
    这显然可以对一个坐标排序而对另一个坐标离散化然后用树状数组维护前缀最大值

      1 var a,b,c,rank,d,v:array[0..100010] of longint;
      2     f,i,x,y,ans,n,m:longint;
      3 
      4 function lowbit(x:longint):longint;
      5   begin
      6     exit(x and (-x));
      7   end;
      8 
      9 function max(a,b:longint):longint;
     10   begin
     11     if a>b then exit(a) else exit(b);
     12   end;
     13 
     14 procedure swap(var a,b:longint);
     15   var c:longint;
     16   begin
     17     c:=a;
     18     a:=b;
     19     b:=c;
     20   end;
     21 
     22 procedure sorta(l,r: longint);
     23   var i,j,x,y: longint;
     24   begin
     25     i:=l;
     26     j:=r;
     27     x:=a[(l+r) shr 1];
     28     y:=b[(l+r) shr 1];
     29     repeat
     30       while (a[i]<x) or ((a[i]=x) and (b[i]<y)) do inc(i);
     31       while (x<a[j]) or ((a[j]=x) and (y<b[j])) do dec(j);
     32       if not(i>j) then
     33       begin
     34         swap(a[i],a[j]);
     35         swap(b[i],b[j]);
     36         swap(v[i],v[j]);
     37         inc(i);
     38         j:=j-1;
     39       end;
     40     until i>j;
     41     if l<j then sorta(l,j);
     42     if i<r then sorta(i,r);
     43   end;
     44 
     45 
     46 procedure sortc(l,r: longint);
     47   var i,j,x,y: longint;
     48   begin
     49     i:=l;
     50     j:=r;
     51     x:=c[(l+r) div 2];
     52     repeat
     53       while c[i]<x do inc(i);
     54       while x<c[j] do dec(j);
     55       if not(i>j) then
     56       begin
     57         swap(c[i],c[j]);
     58         swap(d[i],d[j]);
     59         inc(i);
     60         j:=j-1;
     61       end;
     62     until i>j;
     63     if l<j then sortc(l,j);
     64     if i<r then sortc(i,r);
     65   end;
     66 
     67 procedure work(x,y:longint);
     68   begin
     69     while x<=m do
     70     begin
     71       c[x]:=max(c[x],y);
     72       x:=x+lowbit(x);
     73     end;
     74   end;
     75 
     76 function ask(x:longint):longint;
     77   begin
     78     ask:=0;
     79     while x>0 do
     80     begin
     81       ask:=max(ask,c[x]);
     82       x:=x-lowbit(x);
     83     end;
     84   end;
     85 
     86 begin
     87   readln(m,n);
     88   for i:=1 to n do
     89   begin
     90     readln(x,y,v[i]);
     91     a[i]:=2*x-y;
     92     b[i]:=2*x+y;
     93   end;
     94   sorta(1,n);
     95   for i:=1 to n do
     96   begin
     97     c[i]:=b[i];
     98     d[i]:=i;
     99   end;
    100   sortc(1,n);
    101   m:=1;
    102   rank[d[1]]:=1;
    103   for i:=2 to n do
    104   begin
    105     if c[i]<>c[i-1] then inc(m);
    106     rank[d[i]]:=m;
    107   end;
    108   fillchar(c,sizeof(c),0);
    109   for i:=1 to n do
    110   begin
    111     f:=ask(rank[i])+v[i];
    112     ans:=max(ans,f);
    113     work(rank[i],f);
    114   end;
    115   writeln(ans);
    116 end.
    View Code
  • 相关阅读:
    mysql 提权总结
    CTF线下赛AWD套路小结
    url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介
    url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介
    使用httpclient必须知道的参数设置及代码写法、存在的风险
    使用httpclient必须知道的参数设置及代码写法、存在的风险
    HttpClient学习笔记
    HttpClient学习笔记
    HttpClient系统日志配置
    HttpClient系统日志配置
  • 原文地址:https://www.cnblogs.com/phile/p/4473059.html
Copyright © 2011-2022 走看看