Pagini recente » Cod sursa (job #1405862) | Cod sursa (job #64661) | Cod sursa (job #513407) | Cod sursa (job #147452) | Cod sursa (job #747953)
Cod sursa(job #747953)
#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;
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[i].b - 1, c[i].c - 1);
//++j;
//}
//j = i;
//while(c[j].a == c[i].a) {
update(c[i].b, c[i].c, 1);
// ++j;
//}
//i = j - 1;
}
g << sol << "\n";
for(i = 1; i <= n; ++i)
update(c[i].b, c[i].c, -1);
}
return 0;
}