hdu 4217 (线段树)

来源:互联网 发布:淘宝联盟qq群推广 编辑:程序博客网 时间:2024/05/01 08:38

点击打开链接


模版级别线段树。。


#include"stdio.h"#include"string.h"#define N 300001struct tree{int x,y,mid;int count;}A[3*N];void creat(int x,int y,int k){A[k].x=x;A[k].y=y;A[k].mid=(x+y)/2;A[k].count=1;if(x==y)return ;creat(x,A[k].mid,2*k);creat(A[k].mid+1,y,2*k+1);A[k].count=A[k*2].count+A[k*2+1].count;return ;}int find(int x,int k){if(A[k].x==A[k].y&&A[k].count==1&&x==1){A[k].count=0;return A[k].x;}int ans;if(x>A[2*k].count)ans=find(x-A[2*k].count,2*k+1);else ans=find(x,2*k);A[k].count=A[k*2].count+A[k*2+1].count;return ans;}int main(){int T;int t;int n,m;int i,j;__int64 ans;scanf("%d",&T);t=1;while(T--){scanf("%d%d",&n,&m);creat(1,n,1);ans=0;for(i=0;i<m;i++){scanf("%d",&j);if(j==0)continue;ans+=find(j,1);}printf("Case %d: %I64d\n",t++,ans);}return 0;}


原创粉丝点击