ZOJ Problem Set - 3512Financial Fraud

來源:互聯網
上載者:User

標籤:

左偏樹維護中位元。

低級錯誤:迴圈裡的變數

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;struct Node{       int x,dis,size;       Node *l,*r;       void clear()       {              l=r=NULL;              dis=0;size=1;       }}a[50011];bool check_dis(Node *A){     if (A->r==NULL) return false;     if (A->l==NULL) return true;     return (A->r->dis>A->l->dis);     }Node *merge(Node *A,Node *B){     if (A==NULL) return B;     if (B==NULL) return A;     if (A->x<B->x) swap(A,B);     A->r=merge(A->r,B);     if (check_dis(A)) swap(A->l,A->r);     if (A->r==NULL) A->dis=0;     else A->dis=A->r->dis+1;     A->size=1;     if (A->l!=NULL) A->size+=A->l->size;     if (A->r!=NULL) A->size+=A->r->size;     return A;}Node *Q[50011];int Qs[50011];int num=0;void fix(int i,int n){          //cout<<n<<"**"<<endl;     //system("pause");     while (Q[i]->size>(n+1)/2)     {          //cout<<Q[i]->size<<endl;          //system("pause");          Q[i]=merge(Q[i]->l,Q[i]->r);               }}inline int abs(int x) {return x<0?(-x):x;}void init(){     for (int i=1;i<=n;i++)     {         a[i].clear();         scanf("%d",&a[i].x);     }     num=1;Q[1]=&a[1];Qs[0]=0;Qs[1]=1;     for (int i=2;i<=n;i++)     {         num++;         Q[num]=&a[i];Qs[num]=i;         while (num>1&&Q[num]->x<Q[num-1]->x)         {               Q[num-1]=merge(Q[num],Q[num-1]);                                             //cout<<num<<" "<<Qs[num]<<" "<<Qs[num-1]<<endl;               Qs[num-1]=Qs[num];num--;               //cout<<num<<"OO"<<endl;               fix(num,Qs[num]-Qs[num-1]);                              //system("pause");                        }     }     long long ans=0ll;     for (int i=1;i<=num;i++)     {         for (int j=Qs[i-1]+1;j<=Qs[i];j++)         {             ans+=abs(a[j].x-Q[i]->x);         }     }     //cout<<"*"<<num<<endl;     //for (int i=1;i<=num;i++)     //    cout<<Qs[i]<<"*"<<(Q[i]->x)<<" ";     //cout<<endl;     printf("%lld\n",ans);     }int main(){    while (scanf("%d",&n),n!=0)          init();              return 0;}
View Code

 

ZOJ Problem Set - 3512Financial Fraud

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.