POJ 2828-Buy Tickets

约定不等于承诺〃 2022-09-24 06:16 102阅读 0赞

POJ 2828 线段树

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #define lson rt<<1
  5. #define rson (rt<<1)+1
  6. using namespace std;
  7. int s[200001<<2];
  8. int a[200001],b[200001],c[200001];
  9. void build(int l,int r,int rt)
  10. {
  11. if(l==r)
  12. {
  13. s[rt]=1;
  14. return ;
  15. }
  16. int mid=(l+r)>>1;
  17. build(l,mid,lson);
  18. build(mid+1,r,rson);
  19. s[rt]=s[lson]+s[rson];
  20. }
  21. int query(int l,int r,int rt,int x)
  22. {
  23. int t;
  24. if(l==r)
  25. {
  26. s[rt]=0;
  27. return l;
  28. }
  29. int mid=(l+r)>>1;
  30. if(s[lson]>=x)
  31. t=query(l,mid,lson,x);
  32. else
  33. t=query(mid+1,r,rson,x-s[lson]);
  34. s[rt]=s[lson]+s[rson];
  35. return t;
  36. }
  37. int main()
  38. {
  39. int i,j,k,n,m,l;
  40. while(~scanf("%d",&n))
  41. {
  42. for(i=0;i<n;i++)
  43. {
  44. scanf("%d %d",&a[i],&b[i]);
  45. }
  46. build(1,n,1);
  47. for(i=n-1;i>=0;i--)
  48. {
  49. int t=query(1,n,1,a[i]+1);
  50. // printf("(%d)\n",t);
  51. c[t]=b[i];
  52. }
  53. for(i=1;i<=n;i++)
  54. {
  55. printf("%d ",c[i]);
  56. }
  57. printf("\n");
  58. }
  59. return 0;
  60. }

发表评论

表情:
评论列表 (有 0 条评论,102人围观)

还没有评论,来说两句吧...

相关阅读