Pagini recente » Cod sursa (job #814118) | Cod sursa (job #1535030) | Cod sursa (job #445650) | Cod sursa (job #2388798) | Cod sursa (job #747950)
Cod sursa(job #747950)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 3505;
struct cutii {
int a;
int b;
int c;
};
cutii c[maxn];
int aib[maxn][maxn], n, t, sol;
int cmp(cutii a, cutii b)
{
return a.a < b.a;
}
int lsb(int x)
{
return (x & (x - 1)) ^ x;
}
int query(int a, int b)
{
int i, j, sol = 0;
for(i = a; i >= 1; i -= lsb(i))
for(j = b; j >= 1; j -= lsb(j))
sol += aib[i][j];
return sol;
}
void update(int a, int b, int c)
{
int i, j;
for(i = a; i <= n; i += lsb(i))
for(j = b; j <= n; j += lsb(j))
aib[i][j] += c;
}
int main()
{
int test, i, j;
freopen ("cutii.in", "r", stdin);
freopen ("cutii.out", "w", stdout);
scanf("%d %d", &n, &t);
for(test = 1; test <= t; ++test) {
sol = 0;
memset(aib, 0, sizeof(aib));
for(i = 1; i <= n; ++i)
scanf("%d %d %d", &c[i].a, &c[i].b, &c[i].c);
sort(c + 1, c + n + 1, cmp);
for(i = 1; i <= n; ++i) {
j = i;
while(c[j].a == c[i].a) {
sol += query(c[j].b - 1, c[j].c - 1);
++j;
}
j = i;
while(c[j].a == c[i].a) {
update(c[j].b, c[j].c, 1);
++j;
}
i = j - 1;
}
printf("%d\n", sol);
}
return 0;
}