## CF 1323D-Present（二进制+思维）

### 思路：

```#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc  exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>//freopen("C:\\Users\\13606\\Desktop\\Input.txt","r",stdin);
#include <bitset>
//#include <map>
//#include<unordered_map>
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr strcat
#include <string>
#include <time.h>// srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
#include <cassert>
#include <iomanip>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
//******************
clock_t __START,__END;
double __TOTALTIME;
void _MS(){__START=clock();}
void _ME(){__END=clock();__TOTALTIME=(double)(__END-__START)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
//***********************
#define rint register int
#define fo(a,b,c) for(rint a=b;a<=c;++a)
#define fr(a,b,c) for(rint a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef unsigned long long ull;
typedef long long ll;
typedef double db;
const db E=2.718281828;
const db PI=acos(-1.0);
const ll INF=(1LL<<60);
const int inf=(1<<30);
const db ESP=1e-9;
const int mod=(int)1e9+7;
const int N=(int)1e6+10;

int er[N];
int a[N],b[N];
int get(int n,int x)
{
int pos=0;
for(int i=19;i>=1;--i)
{
if(pos+er[i]<=n&&b[pos+er[i]]<=x)
pos+=er[i];
}
return pos;
}

int main()
{
er[1]=1;
for(int i=2;i<=30;++i)er[i]=er[i-1]*2;
int n;
sc("%d",&n);
for(int i=1;i<=n;++i)sc("%d",&a[i]);
//    _MS();
int ans=0;
for(int pos=1;pos<=25;++pos)
{
for(int i=1;i<=n;++i)b[i]=a[i]&((1<<pos)-1);
sort(b+1,b+1+n);
ll res=0;
for(int i=1;i<=n;++i)
{
int now=b[i];
int l1=1<<(pos-1),r1=(1<<pos)-1;
int l2=(1<<(pos-1))+(1<<pos);
l1-=now,r1-=now;
l2-=now;
int cnt1=get(n,r1)-get(n,l1-1);
if(now>=l1&&now<=r1)cnt1--;
int cnt2=n-get(n,l2-1);
if(now>=l2)cnt2--;
res+=cnt1+cnt2;
}
res/=2;
if(res&1)ans|=1<<(pos-1);
}
pr("%d\n",ans);
//    _ME();
return 0;
}

/**************************************************************************************/```