fork download
  1. #include <iostream>
  2. #include <climits>
  3. using namespace std;
  4. int main() {
  5. long n;
  6. cin>>n;
  7. long *a,m=LONG_MIN;
  8. a=new long [n];
  9. for(long i=0;i<n;i++){
  10. cin>>a[i];
  11. m=max(m,a[i]);
  12. }
  13. long p=1,size=0;
  14. while(p<m){
  15. p=p*2;
  16. size++;
  17. }
  18. p=p/2;
  19. long t=p;
  20. long *c=new long [size+1];
  21. for(long i=size-1;i>=0;i--){
  22. long count=0;
  23. for(long j=0;j<n;j++){
  24. if(a[j]/t==1){
  25. count++;
  26. }
  27. a[j]=a[j]%t;
  28. }
  29. c[i]=count*(count-1)/2;
  30. t=t/2;
  31. }
  32. c[size]=0;
  33. t=1;
  34. long sum=0;
  35. for(long i=0;i<size;i++){
  36. sum=sum+c[i]%2*t;
  37. t=t*2;
  38. c[i+1]=c[i+1]+c[i]/2;
  39. }
  40. while(c[size]!=0){
  41. sum=sum+c[size]%2*t;
  42. t=t*2;
  43. c[size]=c[size]/2;
  44. }
  45. cout<<sum<<endl;
  46. return 0;
  47. }
Success #stdin #stdout 0s 3476KB
stdin
2
23
12
stdout
4