#include <stdio.h>
#include <assert.h>
#define treeSize 131072
#define Nadejde 100000
typedef struct {
int l, r;
int sum;
} cell;
int N, result;
int val[Nadejde + 1];
cell tree[2 * treeSize];
void update(int u, int left, int right, int a, int b, int add) {
int mid = (left + right) >> 1;
if (a <= left && right <= b) {
tree[u].l += add;
tree[u].r += add;
if (left == right) {
tree[u].sum = tree[u].l;
} else {
tree[u].sum = tree[2 * u].sum + (mid - left + 1) * tree[u].l +
tree[2 * u + 1].sum + (right - mid) * tree[u].r;
}
return;
}
if (a <= mid) {
tree[2 * u].l += tree[u].l;
tree[2 * u].r += tree[u].l;
tree[u].l = 0;
update(2 * u, left, mid, a, b, add);
}
if (b > mid) {
tree[2 * u + 1].l += tree[u].r;
tree[2 * u + 1].r += tree[u].r;
tree[u].r = 0;
update(2 * u + 1, mid + 1, right, a, b, add);
}
tree[u].sum = tree[2 * u].sum + (mid - left + 1) * tree[u].l +
tree[2 * u + 1].sum + (right - mid) * tree[u].r;
}
void query(int u, int left, int right, int a, int b) {
int mid = (left + right) >> 1;
if (a <= left && right <= b) {
if (left == right) {
tree[u].sum = tree[u].l;
} else {
tree[u].sum = tree[2 * u].sum + (mid - left + 1) * tree[u].l +
tree[2 * u + 1].sum + (right - mid) * tree[u].r;
}
result += tree[u].sum;
return;
}
if (a <= mid) {
tree[2 * u].l += tree[u].l;
tree[2 * u].r += tree[u].l;
tree[u].l = 0;
query(2 * u, left, mid, a, b);
}
if (b > mid) {
tree[2 * u + 1].l += tree[u].r;
tree[2 * u + 1].r += tree[u].r;
tree[u].r = 0;
query(2 * u + 1, mid + 1, right, a, b);
}
tree[u].sum = tree[2 * u].sum + (mid - left + 1) * tree[u].l +
tree[2 * u + 1].sum + (right - mid) * tree[u].r;
}
/* verificare*/
void afis() {
for (int i = 1; i <= N; i++) {
fprintf(stderr, "%d ", i);
}
fprintf(stderr, "\n");
for (int i = 1; i <= N; i++) {
result = 0;
query(1, 1, N, i, i);
assert(val[i] == result);
fprintf(stderr, "%d ", val[i]);
}
fprintf(stderr, "\n");
}
/**/
int main(void) {
FILE *f = fopen("1.in", "r");
/* Probe.*/
fscanf(f, "%d", &N);
int a, b;
while (fscanf(f, "%d %d", &a, &b) != EOF) {
fprintf(stderr, "Incrementam [%d, %d]\n", a, b);
for (int j = a; j <= b; j++) {
val[j] += 1;
}
update(1, 1, N, a, b, +1);
result = 0;
query(1, 1, N, 1, N);
fprintf(stderr,"%d\n", result);
afis();
}
/**/
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}