3718: [PA2014]Parking 树状数组

%CA凉
代码风格药丸

#include
#include
#include
#include
using namespace std;

const int N=50005;
int n,m;
int tree[N],pos[N];

inline int read()
{
  int a=0,f=1; char c=getchar();
  while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
  while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
  return a*f;
}

struct Car
{
  int x1,y1,x2,y2,w,id;
  Car () {};
  Car (int _,int __,int ___,int ____,int _____,int ______)
  {
    x1=_; y1=__; x2=___; y2=____; w=_____; id=______;
  }
}first[N],second[N];

inline bool operator<(Car a,Car b)
{
  return a.x1==b.x1?a.x2inline int lowbit(int i)
{
  return (i&(-i));
}

inline void add(int x,int val)
{
  for (int i=x;i<=n;i+=lowbit(i)) tree[i]=max(tree[i],val);
}

inline int query(int x)
{
  int tmp=0;
  for (int i=x;i;i-=lowbit(i)) tmp=max(tmp,tree[i]);
  return tmp;
}

int main()
{
  int testcase=read();
  while (testcase--)
    {
      memset(tree,0,sizeof(tree));
      n=read(); m=read();
      for (int i=1;i<=n;i++)
    {
      int x1=read(),y1=read(),x2=read(),y2=read();
      if (x1>x2) swap(x1,x2);
      if (y1>y2) swap(y1,y2);
      first[i]=Car(x1,y1,x2,y2,y2-y1,i);
    }
      for (int i=1;i<=n;i++)
    {
      int x1=read(),y1=read(),x2=read(),y2=read();
      if (x1>x2) swap(x1,x2);
          if (y1>y2) swap(y1,y2);
      second[i]=Car(x1,y1,x2,y2,y2-y1,i);
    }
      sort(first+1,first+n+1);
      sort(second+1,second+n+1);
      for (int i=1;i<=n;i++) pos[first[i].id]=i;
      bool flag=true;
      for (int i=n;i;i--)
    {
      if (query(pos[second[i].id])+second[i].w>m) flag=false;
      if (!flag) break;
      add(pos[second[i].id],second[i].w);
    }
      puts(flag?"TAK":"NIE");
    }
  return 0;
}

你可能感兴趣的:(My,Code)