unlucky_13

LOJ_1087 - Diablo

Jul 24th, 2013
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. /* unlucky_13 Jul 20, 2013 11:01:42 PM
  2. *
  3. */
  4. #include <cmath>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <cstdlib>
  8.  
  9. #include <iostream>
  10. #include <vector>
  11. #include <queue>
  12. #include <map>
  13. #include <set>
  14. #include <algorithm>
  15. #define maxn 150005
  16. using namespace std;
  17. int cnt_of_elements[4*maxn],q,A[maxn];
  18.  
  19. int call(int idx,int s,int e,int pos){
  20.  
  21. cnt_of_elements[idx]-- ;
  22. if(s==e){
  23. return s ;
  24. }
  25. int mid = (s+e)>>1 ;
  26. int next =idx<<1 ;
  27. //cout<<cnt_of_elements[idx]<<endl ;
  28. if(cnt_of_elements[next]>=pos){
  29. return call(next,s,mid,pos) ;
  30. }
  31. else{
  32. return call(next+1,mid+1,e,pos-cnt_of_elements[next]) ;
  33. }
  34.  
  35.  
  36. }
  37.  
  38. void update(int idx,int s,int e,int pos,int value){
  39. if(s==pos && e==pos){
  40. cnt_of_elements[idx]+=value ;
  41. return ;
  42. }
  43. int mid = (s+e)>>1 ;
  44. int next =idx<<1 ;
  45. if(mid>=pos){
  46. update(next,s,mid,pos,value) ; //go to left
  47. }
  48.  
  49. else{
  50. update(next+1,mid+1,e,pos,value) ;
  51. }
  52. cnt_of_elements[idx] = cnt_of_elements[next]+cnt_of_elements[next+1] ;
  53.  
  54. }
  55.  
  56. int main() {
  57.  
  58. //freopen("//home//unlucky_13//workspace//Hello_World//src//in.txt","r",stdin) ;
  59. int tc,ct=0,d,n,N;
  60. char c ;
  61. scanf("%d",&tc) ;
  62. while(ct!=tc){
  63. memset(cnt_of_elements,0,sizeof(cnt_of_elements)) ;
  64. scanf("%d %d\n",&n,&q) ;
  65. int total = n+q ;
  66. N = n ;
  67. for(int i=1;i<=n;i++) {
  68. scanf("%d",A+i) ;
  69. update(1,1,total,i,1) ;
  70.  
  71. }
  72. printf("Case %d:\n",++ct) ;
  73. while(q--){
  74. scanf(" %c %d",&c,&d) ;
  75. if(c=='c'){
  76. int ret ;
  77. if(d>n) ret = -1 ;
  78. else {
  79. ret = call(1,1,total,d) ;
  80. n-- ;
  81. }
  82.  
  83. if(ret==-1) printf("none\n") ;
  84. else printf("%d\n",A[ret]) ;
  85. }
  86. else{
  87. A[++N] = d ;
  88. n++ ;
  89. update(1,1,total,N,1) ;
  90. }
  91. }
  92. }
  93.  
  94.  
  95. return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment