fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct sg_tree
  6. {
  7. static const int MPOW=18;
  8. static const int N=1<<MPOW-1;
  9. int arr[N<<1];
  10.  
  11. sg_tree(){fill(arr,arr+(N<<1),0);}
  12.  
  13. void add(int x)
  14. {
  15. x+=N;
  16. arr[x]=1;
  17. while(x>>=1)
  18. arr[x]=arr[x<<1]+arr[(x<<1)+1];
  19. }
  20.  
  21. int get(int c,int cl,int cr,int x,int left)
  22. {
  23. if(cl==cr)
  24. {
  25. arr[c]=0;
  26. return c-N;
  27. }
  28. int cm=(cl+cr)>>1,ret;
  29. if(arr[c<<1]+left<=x)
  30. ret=get((c<<1)+1,cm+1,cr,x,left+arr[c<<1]);
  31. else
  32. ret=get(c<<1,cl,cm,x,left);
  33. arr[c]=arr[c<<1]+arr[(c<<1)+1];
  34. return ret;
  35. }
  36.  
  37. int get(int x)
  38. {
  39. return get(1,0,N-1,x,0);
  40. }
  41. } soldiers;
  42. main()
  43. {
  44. ios::sync_with_stdio(0);
  45. cin.tie(0);
  46. int n,k;
  47. cin>>n>>k;
  48. for(int i=0;i<n;i++)
  49. soldiers.add(i+1);
  50. int cur=0;
  51. while(n)
  52. {
  53. cur=(cur+k-1)%n;
  54. cout<<soldiers.get(cur)<<endl;
  55. --n;
  56. }
  57. }
  58.  
Success #stdin #stdout 0s 4468KB
stdin
5 3
stdout
3
1
5
2
4