Cod sursa(job #1267304)

Utilizator cojocarugabiReality cojocarugabi Data 19 noiembrie 2014 19:13:49
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
# include <bits/stdc++.h>
using namespace std;
ifstream fi("cutii.in");
ofstream fo("cutii.out");
struct cc
{
    int x,y,z;
} s[3505];
int n;
short d[3505];
short dp[3505][3505];
bool cmp(cc a,cc b)
{
    return (a.z<b.z);
}
short query(int x,int y)
{
    short ans=0;
    for (int i=x;i;i-=(i & -i))
         for (int j=y;j;j-=(j & -j)) ans=max(ans,dp[i][j]);
    return ans;
}
void update(int x,int y,short z)
{
    for (int i=x;i<=n;i+=(i & -i))
        for (int j=y;j<=n;j+=(j & -j)) dp[i][j]=max(dp[i][j],z);
}
int main(void)
{
    int t;
    fi>>n>>t;
    while (t --)
    {
        short ans=0;
        for (int i=1;i<=n;++i)  fi>>s[i].x>>s[i].y>>s[i].z;
        sort(s+1,s+1+n,cmp);
        memset(dp,0,sizeof(dp));
        for (int i=1;i<=n;++i) d[i]=query(s[i].x,s[i].y)+1,ans=max(ans,d[i]),update(s[i].x,s[i].y,d[i]);
        fo << ans << '\n';
    }
    return 0;
}