#include <string>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
typedef pair<int, int> point;
struct line
{
int lineid;
point starting, ending;
bool operator<(const line& other) const
{
return other.lineid < lineid;
}
};
int main(int argc, char* argv[])
{
typedef map<int, line> mymap;
line w,x,y,z;
w.lineid = 1;
w.starting = { 5, 1 };
w.ending = { 5, 100 };
x.lineid = 2;
x.starting = { 20, 56 };
x.ending = { 120, 56 };
y.lineid = 3;
y.starting = { 100, 150 };
y.ending = { 100, 200 };
z.lineid = 4;
z.starting = { 330, 50 };
z.ending = { 330, 150 };
mymap bin1;
bin1.insert({ w.lineid, w });
bin1.insert({ x.lineid, x });
bin1.insert({ y.lineid, y });
mymap bin2;
bin2.insert({ x.lineid, x });
bin2.insert({ y.lineid, y });
bin2.insert({ z.lineid, z });
mymap out;
mymap::iterator out_itr(out.begin());
set_intersection(bin1.begin(), bin1.end(), bin2.begin(), bin2.end(),
inserter(out, out_itr),
[] (const std::pair<int, line>& p1, const std::pair<int, line>& p2) { return p1.first != p2.first; } );
cout << "" << out.size();
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBvaW50OwoKc3RydWN0IGxpbmUKewogICAgaW50IGxpbmVpZDsKICAgIHBvaW50IHN0YXJ0aW5nLCBlbmRpbmc7CiAgICAKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGxpbmUmIG90aGVyKSBjb25zdAogICAgewogICAgCXJldHVybiBvdGhlci5saW5laWQgPCBsaW5laWQ7CiAgICB9CiAgICAKfTsKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewogICAgdHlwZWRlZiBtYXA8aW50LCBsaW5lPiBteW1hcDsgICAKICAgIGxpbmUgdyx4LHksejsKICAgIHcubGluZWlkID0gMTsKICAgIHcuc3RhcnRpbmcgPSB7IDUsIDEgfTsKICAgIHcuZW5kaW5nID0geyA1LCAxMDAgfTsKICAgIHgubGluZWlkID0gMjsKICAgIHguc3RhcnRpbmcgPSB7IDIwLCA1NiB9OwogICAgeC5lbmRpbmcgPSB7IDEyMCwgNTYgfTsKICAgIHkubGluZWlkID0gMzsKICAgIHkuc3RhcnRpbmcgPSB7IDEwMCwgMTUwIH07CiAgICB5LmVuZGluZyA9IHsgMTAwLCAyMDAgfTsKICAgIHoubGluZWlkID0gNDsKICAgIHouc3RhcnRpbmcgPSB7IDMzMCwgNTAgfTsKICAgIHouZW5kaW5nID0geyAzMzAsIDE1MCB9OwoKICAgIG15bWFwIGJpbjE7CiAgICBiaW4xLmluc2VydCh7IHcubGluZWlkLCB3IH0pOwogICAgYmluMS5pbnNlcnQoeyB4LmxpbmVpZCwgeCB9KTsKICAgIGJpbjEuaW5zZXJ0KHsgeS5saW5laWQsIHkgfSk7CgogICAgbXltYXAgYmluMjsKICAgIGJpbjIuaW5zZXJ0KHsgeC5saW5laWQsIHggfSk7CiAgICBiaW4yLmluc2VydCh7IHkubGluZWlkLCB5IH0pOwogICAgYmluMi5pbnNlcnQoeyB6LmxpbmVpZCwgeiB9KTsKCiAgICBteW1hcCBvdXQ7CiAgICBteW1hcDo6aXRlcmF0b3Igb3V0X2l0cihvdXQuYmVnaW4oKSk7CiAgICBzZXRfaW50ZXJzZWN0aW9uKGJpbjEuYmVnaW4oKSwgYmluMS5lbmQoKSwgYmluMi5iZWdpbigpLCBiaW4yLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZXIob3V0LCBvdXRfaXRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6OnBhaXI8aW50LCBsaW5lPiYgcDEsIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGxpbmU+JiBwMikgeyByZXR1cm4gcDEuZmlyc3QgIT0gcDIuZmlyc3Q7IH0gKTsgCiAgICBjb3V0IDw8ICIiIDw8IG91dC5zaXplKCk7ICAgICAgICAgICAgICAgCgogICAgICAgIHJldHVybiAwOwogICAgfQ==