Cod sursa(job #2515559)

Utilizator Simon2712Simon Slanina Simon2712 Data 28 decembrie 2019 20:33:26
Problema Divizori Primi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("dreptunghiuri4.in");
ofstream cout("dreptunghiuri4.out");
void schimb (int &x,int &y)
{
  int cop=x;
  x=y;
  y=cop;
}
int v[2001],v2[2001];
int cautbin(int v[],int n,int val)
{
  int st=1,dr=n,m;
  while(st<=dr)
  {
    m=(st+dr)/2;
    if(val==v[m])
      return m;
    else
    if(val<v[m])
      dr=m-1;
    else
      st=m+1;
  }
}
struct ura{
  int x,y,x2,y2;
};
ura v1[1001];
int a[2001][2001];
int main()
{
  int n,k,i,j,x,y,x2,y2,nr=0,nrr=0,nrr2=0;
  long long rez=0;
  cin>>n>>k;
  for(i=1;i<=n;i++)
  {
    cin>>x>>y>>x2>>y2;
    v1[i].x=x;
    v1[i].y=y;
    v1[i].x2=x2;
    v1[i].y2=y2;
    if(x>x2)
      schimb(x,x2);
    if(y>y2)
      schimb(y,y2);
    nr++;
    v[nr]=x;
    v2[nr]=y;
    nr++;
    v[nr]=x2;
    v2[nr]=y2;
  }
  sort(v+1,v+nr+1);
  sort(v2+1,v2+nr+1);
  for(i=1;i<=nr;i++)
  {
    if(v[i]!=v[i-1])
    {
      nrr++;
      v[nrr]=v[i-1];
    }
  }
  nrr++;
  v[nrr]=v[nr];
  for(i=1;i<=nr;i++)
  {
    if(v2[i]!=v2[i-1])
    {
      nrr2++;
      v2[nrr2]=v2[i-1];
    }
  }
  nrr2++;
  v2[nrr2]=v2[nr];
  for(i=1;i<=n;i++)
  {
    x=cautbin(v,nrr,v1[i].x);
    x2=cautbin(v,nrr,v1[i].x2);
    y=cautbin(v2,nrr2,v1[i].y);
    y2=cautbin(v2,nrr,v1[i].y2);
    a[x2][y2]++;
    a[x][y]++;
    a[x][y2]--;
    a[x2][y]--;
  }
  for(i=1;i<=nrr;i++)
  for(j=1;j<=nrr2;j++)
    a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
  for(i=1;i<=nrr;i++)
  for(j=1;j<=nrr2;j++)
    if(a[i][j]==k)
      rez+=((long long)(v[i+1]-v[i]))*(v2[j+1]-v2[j]);
  cout<<rez;
  return 0;
}