Блог пользователя neohacker

Автор neohacker, 6 лет назад, По-русски
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int bor[2][3000002];
int cnt[2][3000002];
int T = 1;
int el = 0;
void add(int a)
{
	int cur = 0;
	for(int i = 30;i>=0;i--)
	{
	 	bool tmp = (((1<<i)&a)>>i);
	 	if(bor[tmp][cur] == 0)
		 	bor[tmp][cur] = T++;
	 	cnt[tmp][cur]++;
	 	cur = bor[tmp][cur];
	}
}
int k_el(int a)
{
	int cur = 0;
	int ans = 0;
	int tmp = 30;
	while(tmp >= 0)
	{
		if(cnt[0][cur] >= a)
		{
			cnt[0][cur]--; 	
			cur = bor[0][cur];
	 	}
	 	else
	 	{
	 		a -= cnt[0][cur];
	 	 	ans += (1<<tmp);
	 	 	cnt[1][cur]--;
	 	 	cur = bor[1][cur];
	 	}
	 	tmp--;
 	}
 	return ans;
}
void go()
{
	for(int i = 0;i<el;i++)
	{
	 	cout << k_el(1) << " ";
	}
}
int main()
{       
        ios::sync_with_stdio(0);  
        #ifndef LOCAL
	freopen("machine.in","r",stdin);
	freopen("machine.out","w",stdout);	
	#endif            
        int n;
        cin >> n;
        for(int i = 0;i<n;i++)
        {
                int a;
                cin >> a;
                if(a > 0)
                {
                        add(a);
                        el++;
                }
                else if(a < 0)
                {
			cout << k_el(-a) << endl;
			el--;
                }
                else
                {                	
                	go();
                	el = 0;      
                }
        }
}
  • Проголосовать: нравится
  • -39
  • Проголосовать: не нравится