Pagini recente » Cod sursa (job #2084821) | Cod sursa (job #327982) | Cod sursa (job #2723254) | Cod sursa (job #2478275) | Cod sursa (job #747951)
Cod sursa(job #747951)
#include <fstream>
#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;
ifstream f ("cutii.in");
ofstream g ("cutii.out");
f >> n >> t;
for(test = 1; test <= t; ++test) {
sol = 0;
memset(aib, 0, sizeof(aib));
for(i = 1; i <= n; ++i)
f >> 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;
}
g << sol << "\n";
}
return 0;
}