本文整理汇总了C++中BIT::reset方法的典型用法代码示例。如果您正苦于以下问题:C++ BIT::reset方法的具体用法?C++ BIT::reset怎么用?C++ BIT::reset使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BIT
的用法示例。
在下文中一共展示了BIT::reset方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
int s;
scanf("%d", &s);
sect[s].push_back(i);
}
for (int i = 1; i <= n; ++i) scanf("%d", &need[i]);
scanf("%d", &k);
for (int q = 0; q < k; ++q) {
scanf("%d%d%d", &l[q], &r[q], &a[q]);
}
for (int i = 1; i <= n; ++i) {
lo[i] = 0;
hi[i] = k;
}
BIT bit;
while (!terminated()){
// clear tree
bit.reset();
// generate new check
for (int i = 1; i <= n; ++i) {
int mid = (lo[i]+hi[i])/2;
check[mid].push_back(i);
}
for (int q = 0; q < k; ++q) {
// apply query
if (l[q] <= r[q]) {
bit.update(l[q], a[q]);
bit.update(r[q]+1, -a[q]);
}
else {
bit.update(l[q], a[q]);
bit.update(1, a[q]);
bit.update(r[q]+1, -a[q]);
}
// check
for (auto &v: check[q]) {
long long sum = 0;
for (auto &s: sect[v]) {
sum += bit.query(s);
if (sum >= need[v]) break;
}
if (sum >= need[v]) {
hi[v] = q;
}
else {
lo[v] = q+1;
}
}
check[q].clear();
}
}
for (int i = 1; i <= n; ++i) {
if (lo[i] < k) printf("%d\n", lo[i]+1);
else puts("NIE");
}
return 0;
}