Pagini recente » Cod sursa (job #1344274) | Cod sursa (job #2926259) | Cod sursa (job #2971520) | Istoria paginii utilizator/melniciucilie | Cod sursa (job #3146218)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
///#include <tryhardmode>
///#include <GODMODE::ON>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
class InParser {
private:
FILE *fin;
char *buff;
int sp;
char read_ch() {
++sp;
if (sp == 4096) {
sp = 0;
fread(buff, 1, 4096, fin);
}
return buff[sp];
}
public:
InParser(const char* nume) {
fin = fopen(nume, "r");
buff = new char[4096]();
sp = 4095;
}
InParser& operator >> (int &n) {
char c;
while (!isdigit(c = read_ch()) && c != '-');
int sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
InParser& operator >> (long long &n) {
char c;
n = 0;
while (!isdigit(c = read_ch()) && c != '-');
long long sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
};
InParser fin ("cutii.in");
ofstream fout ("cutii.out");
const int NMAX=3505;
int aib[NMAX][NMAX];
int n;
struct coords{
int x;
int y;
int z;
}v[NMAX];
bool cmp(coords a,coords b)
{
return a.z<b.z;
}
int lsb(int x)
{
return x & (-x);
}
void update(int x,int y,int val)
{
int i,j;
for(i=x;i<=n;i+=lsb(i))
for(j=y;j<=n;j+=lsb(j))
aib[i][j]=max(aib[i][j],val);
}
int query(int x,int y)
{
int i,j,best=0;
for(i=x;i>0;i-=lsb(i))
for(j=y;j>0;j-=lsb(j))
best=max(best,aib[i][j]);
return best+1;
}
void clear_aib(int x,int y)
{
int i,j;
for(i=x;i<=n;i+=lsb(i))
for(j=y;j<=n;j+=lsb(j))
aib[i][j]=0;
}
void solve()
{
int i,kon=1;
for(i=1;i<=n;i++)
fin>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++)
{
kon=max(kon,query(v[i].x-1,v[i].y-1));
update(v[i].x,v[i].y,query(v[i].x-1,v[i].y-1));
}
fout<<kon<<"\n";
for(i=1;i<=n;i++)
clear_aib(v[i].x,v[i].y);
}
int main()
{
ios_base::sync_with_stdio(false);
fout.tie(NULL);
int t;
fin>>n>>t;
while(t--)
{
solve();
}
fout.close();
return 0;
}