首页 > 代码库 > ACM基础训练题解4302 丢失的牛
ACM基础训练题解4302 丢失的牛
简单线段树插入和查询删除
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstring> 4 using namespace std; 5 int num[10000]; 6 int node[20000]; 7 int scale; 8 void clear(int n){ 9 scale=1;10 while(scale<=n+1)11 scale=scale<<1;12 memset(node,0,sizeof(node));13 for(int i=scale+1;i<=scale+n;i++)14 node[i]=1;15 for(int i=scale-1;i>=1;i--)16 node[i]=node[i+i]+node[i+i+1];17 return ;18 } 19 int insert(int loc){20 int p=1;21 while(p<scale){22 node[p]--;23 if(node[p<<1]-loc>0)24 p+=p;25 else {26 loc-=node[p<<1];27 p=p+p+1;28 } 29 }30 node[p]=0;31 return (p-scale);32 }33 int main(){34 int n;35 cin>>n;36 clear(n);37 num[1]=0;38 for(int i=2;i<=n;i++)39 cin>>num[i];40 for(int i=n;i>=1;i--)41 num[i]=insert(num[i]);42 for(int i=1;i<=n;i++)43 cout<<num[i]<<endl;44 return 0;45 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。