Heim >Web-Frontend >HTML-Tutorial >Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)_html/css_WEB-ITnose

Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 11:56:411545Durchsuche

题目地址:http://codeforces.com/contest/474/problem/E

第一次遇到这种用线段树来维护DP的题目。ASC中也遇到过,当时也很自然的想到了线段树维护DP,但是那题有简单方法,于是就没写。这次终于写出来了。。

这题的DP思想跟求最长上升子序列的思想是一样的。只不过这里的找前面最大值时会超时,所以可以用线段树来维护这个最大值,然后由于还要输出路径,所以要用线段树再来维护一个每个数在序列中所在的位置信息。

手残了好多地方,终于调试出来了。。。

代码如下:

#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;#define LL __int64#define lson l, mid, rt=maxv[rt>1;    if(p=r)    {        if(q_maxv<maxv q_maxv="maxv[rt];" q_maxp="maxp[rt];" return int mid="l+r">>1, ans=0;    if(llmid) query(ll,rr,rson);}int bin_seach(LL x){    int low=0, high=cnt-1, mid;    while(low>1;        if(d[mid]==x) return mid;        else if(d[mid]>x) high=mid-1;        else low=mid+1;    }}int l_seach(LL x){    int low=0, high=cnt-1, mid, ans=-1;    while(low>1;        if(d[mid]>1;        if(d[mid]>=x)        {            ans=mid;            high=mid-1;        }        else low=mid+1;    }    return ans;}void print(int x){    if(x==-1) return ;    print(pre[x]);    printf("%d ",x+1);}int main(){    int n, dd, i, x, ans, y, z, max1=-1, pos, tot;    scanf("%d%d",&n,&dd);    for(i=0; i<n i scanf c sort d cnt="1;" for if printf puts memset x="bin_seach(a[i]);" y="l_seach(a[i]-dd);" z="r_seach(a[i]+dd);" q_maxp="-1;" q_maxv="-1;" query update pre max1="q_maxv+1;" pos="i;" print return>  <br>  <br>  <p></p> </n></maxv></algorithm></set></map></queue></ctype.h></math.h></stdlib.h></cstring></string></cstdio></iostream>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn