球球啦!
#include <bits/stdc++.h>
using namespace std;
int a[1000010],b[1000010],us[1000010],usb[1000010],zb[1000010];
map<int,int> mp;
map<int,int> sy;
using MII = map<int,int>::iterator;
int main()
{
int n;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
scanf("%d%d",&a[i],&b[i]);
if(a[i] == 1) sy[b[i]]++;
}
for(int i = 1;i <= n;i++)
{
if(a[i] == 1)
{
mp[b[i]]++;
}
else
{
mp[b[i]]--;
}
}
for(MII it = mp.begin();it != mp.end();it++)
{
if(it->second < 0)
{
printf("-1");
return 0;
}
}
for(int i = 1;i <= n;i++)
{
if(a[i] == 2)
{
us[b[i]]++;
usb[b[i]]++;
//cout << b[i] << endl;
}
}
int mx = 0;
int now = 0;
for(int i = 1;i <= n;i++)
{
if(a[i] == 1)
{
if(sy[b[i]] <= usb[b[i]] || (zb[b[i]] == 0 && usb[b[i]] > 0))
{
now++;
zb[b[i]]++;
usb[b[i]]--;
}
sy[b[i]]--;
}
if(a[i] == 2)
{
zb[b[i]]--;
if(zb[b[i]] < 0)
{
printf("-1");
return 0;
}
now--;
}
mx = max(mx,now);
}
cout << mx << endl;
for(int i = 1;i <= n;i++)
{
sy[b[i]] = 0;
}
for(int i = 1;i <= n;i++)
{
if(a[i] == 1) sy[b[i]]++;
}
memset(zb,0,sizeof zb);
for(int i = 1;i <= n;i++)
{
if(a[i] == 1)
{
//cout << us[b[i]] << endl;
if(sy[b[i]] <= us[b[i]] || (zb[b[i]] == 0 && us[b[i]] > 0))
{
zb[b[i]]++;
us[b[i]]--;
cout << "1 ";
}
else cout << "0 ";
sy[b[i]]--;
}
else
{
zb[b[i]]--;
if(zb[b[i]] < 0)
{
printf("-1");
return 0;
}
}
}
return 0;
}
我要死啦!┏┛墓┗┓...(((m-__-)m
11个就是不对