| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
第一个线段树程序就不知道哪里错了,麻烦诸位大牛帮帮忙,谢谢。#include<iostream.h> int B[400002],E[400002],C[400002]; //分别表示线段起点,终点,线段内1的个数 int person[200000][2]; //进入队中的人 int result[200001]; //结果序列 void Init(int begin,int end,int v) //初始化线段树 { if(begin==end) //叶子 { B[v]=begin; E[v]=end; C[v]=1; } else { B[v]=begin; E[v]=end; C[v]=end-begin+1; Init(begin,(begin+end)/2,2*v); Init((begin+end)/2+1,end,2*v+1); } } void change(int count,int value,int v) //用每个进入队伍的人调整线段树 { C[v]--; if(B[v]==E[v]) { result[B[v]]=value; return; } if(C[2*v]>count) { change(count,value,2*v); } else { change(count-C[2*v],value,2*v+1); } } int main() { int n,i; while(cin>>n) { Init(1,n,1); for(i=0;i<n;i++) { cin>>person[i][0]>>person[i][1]; } for(i=n-1;i>=0;i--) { change(person[i][0],person[i][1],1); } for(i=1;i<n;i++) { cout<<result[i]<<' '; } cout<<result[i]<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator