#include<bits/stdc++.h>
using namespace std;
bool shouldSendAlert(map<int, deque<int>>& mp, int timeLimit, int eventLimit, int eventId, int eventTs, int userId){
auto& dq = mp[userId]; // Reference, no copy
// 1. Remove timestamps outside the window
while (!dq.empty() && eventTs - dq.front() > timeLimit) {
dq.pop_front();
}
// 2. Decide whether to send alert
bool send = dq.size() < eventLimit;
// 3. Always push current timestamp
dq.push_back(eventTs);
return send;
}
int main(){
int noOfTestCases;
cin >> noOfTestCases;
int timeLimit;
cin >> timeLimit;
int eventLimit;
cin >> eventLimit;
int i = 0 ;
map<int, deque<int>> mp;
while(i < noOfTestCases){
int eventId, eventTs, userId;
cin >> eventId >> eventTs >> userId;
cout << shouldSendAlert(mp, timeLimit, eventLimit,eventId, eventTs, userId);
cout << endl;
i++;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgc2hvdWxkU2VuZEFsZXJ0KG1hcDxpbnQsIGRlcXVlPGludD4+JiBtcCwgaW50IHRpbWVMaW1pdCwgaW50IGV2ZW50TGltaXQsIGludCBldmVudElkLCBpbnQgZXZlbnRUcywgaW50IHVzZXJJZCl7CglhdXRvJiBkcSA9IG1wW3VzZXJJZF07ICAvLyBSZWZlcmVuY2UsIG5vIGNvcHkKCiAgICAvLyAxLiBSZW1vdmUgdGltZXN0YW1wcyBvdXRzaWRlIHRoZSB3aW5kb3cKICAgIHdoaWxlICghZHEuZW1wdHkoKSAmJiBldmVudFRzIC0gZHEuZnJvbnQoKSA+IHRpbWVMaW1pdCkgewogICAgICAgIGRxLnBvcF9mcm9udCgpOwogICAgfQoKICAgIC8vIDIuIERlY2lkZSB3aGV0aGVyIHRvIHNlbmQgYWxlcnQKICAgIGJvb2wgc2VuZCA9IGRxLnNpemUoKSA8IGV2ZW50TGltaXQ7CgogICAgLy8gMy4gQWx3YXlzIHB1c2ggY3VycmVudCB0aW1lc3RhbXAKICAgIGRxLnB1c2hfYmFjayhldmVudFRzKTsKCiAgICByZXR1cm4gc2VuZDsKCn0KCmludCBtYWluKCl7CglpbnQgbm9PZlRlc3RDYXNlczsKCWNpbiA+PiBub09mVGVzdENhc2VzOwoJaW50IHRpbWVMaW1pdDsKCWNpbiA+PiB0aW1lTGltaXQ7CgkKCWludCBldmVudExpbWl0OwoJY2luID4+IGV2ZW50TGltaXQ7CgkKCWludCBpID0gMCA7CgltYXA8aW50LCBkZXF1ZTxpbnQ+PiBtcDsKCXdoaWxlKGkgPCBub09mVGVzdENhc2VzKXsKCQlpbnQgZXZlbnRJZCwgZXZlbnRUcywgdXNlcklkOwoJCWNpbiA+PiBldmVudElkID4+ICBldmVudFRzID4+IHVzZXJJZDsKCQljb3V0IDw8IHNob3VsZFNlbmRBbGVydChtcCwgdGltZUxpbWl0LCBldmVudExpbWl0LGV2ZW50SWQsIGV2ZW50VHMsIHVzZXJJZCk7CgkJY291dCA8PCBlbmRsOwoJCWkrKzsKCX0KCn0=