#include <iostream>
using namespace std;
class BitArr
{
public:
unsigned char * data;
BitArr(int);
bool getValue(int);
void setValue(int, bool);
~BitArr();
};
BitArr::BitArr(int s)
{
int size = s/8;
if(s%8!=0)
size++;
this->data = (unsigned char*)calloc(size, sizeof(unsigned char));
}
BitArr::~BitArr()
{
free(this->data);
}
bool BitArr::getValue(int pos)
{
return (*(this->data+pos/8) & (1<<(8-pos%8)));
}
void BitArr::setValue(int pos, bool val)
{
if(val == true)
*(this->data+pos/8) |= (1<<(8-pos%8));
else
*(this->data+pos/8) &= ~(1<<(8-pos%8));
return;
}
int main() {
BitArr a(20);
a.setValue(3, true);
a.setValue(7, true);
a.setValue(18, true);
for(int i = 0 ; i<20; i++)
cout << a.getValue(i);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQml0QXJyCnsKCXB1YmxpYzoKCXVuc2lnbmVkIGNoYXIgKiBkYXRhOwoJQml0QXJyKGludCk7Cglib29sIGdldFZhbHVlKGludCk7Cgl2b2lkIHNldFZhbHVlKGludCwgYm9vbCk7Cgl+Qml0QXJyKCk7Cn07CgpCaXRBcnI6OkJpdEFycihpbnQgcykKewoJaW50IHNpemUgPSBzLzg7CglpZihzJTghPTApCgkJc2l6ZSsrOwoJCQoJdGhpcy0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyKiljYWxsb2Moc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsKfQoKQml0QXJyOjp+Qml0QXJyKCkKewoJZnJlZSh0aGlzLT5kYXRhKTsKfQoKYm9vbCBCaXRBcnI6OmdldFZhbHVlKGludCBwb3MpCnsKCXJldHVybiAoKih0aGlzLT5kYXRhK3Bvcy84KSAmICgxPDwoOC1wb3MlOCkpKTsKfQoKdm9pZCBCaXRBcnI6OnNldFZhbHVlKGludCBwb3MsIGJvb2wgdmFsKQp7CglpZih2YWwgPT0gdHJ1ZSkKCQkqKHRoaXMtPmRhdGErcG9zLzgpIHw9ICgxPDwoOC1wb3MlOCkpOwoJZWxzZQoJCSoodGhpcy0+ZGF0YStwb3MvOCkgJj0gfigxPDwoOC1wb3MlOCkpOwoJcmV0dXJuOwp9CgppbnQgbWFpbigpIHsKCUJpdEFyciBhKDIwKTsKCWEuc2V0VmFsdWUoMywgdHJ1ZSk7CglhLnNldFZhbHVlKDcsIHRydWUpOwoJYS5zZXRWYWx1ZSgxOCwgdHJ1ZSk7Cglmb3IoaW50IGkgPSAwIDsgaTwyMDsgaSsrKQoJCWNvdXQgPDwgYS5nZXRWYWx1ZShpKTsKCXJldHVybiAwOwp9