Cod sursa(job #197603)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 5 iulie 2008 11:46:30
Problema Reconst Scor 35
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.43 kb
#include<fstream>
using namespace std;
fstream in,out;
int i,j,k;
int sm;
int m,n;
int s[3][2001];
int x[2001];

void interclasare(int p, int m, int q)
  {
  int i=p,j=m+1,k=0;
  int v[3][2001];
  while(i<=m && j<=q)
    if((s[1][i]<s[1][j]) || (s[1][i]==s[1][j] && s[2][i]<=s[2][j])) { k++; v[0][k]=s[0][i]; v[1][k]=s[1][i]; v[2][k]=s[2][i]; i++; }
    else { k++; v[0][k]=s[0][j]; v[1][k]=s[1][j]; v[2][k]=s[2][j]; j++; }
  while(i<=m) { k++; v[0][k]=s[0][i]; v[1][k]=s[1][i]; v[2][k]=s[2][i]; i++; }
  while(j<=q) { k++; v[0][k]=s[0][j]; v[1][k]=s[1][j]; v[2][k]=s[2][j]; j++; }
  for(i=p;i<=q;i++) { s[0][i]=v[0][i-p+1]; s[1][i]=v[1][i-p+1]; s[2][i]=v[2][i-p+1]; }
  }
void msort(int p, int q)
  {
  if(q>p)
    {
    int m=(p+q)/2;
    msort(p,m);
    msort(m+1,q);
    interclasare(p,m,q);
    }
  }
int main()
{
in.open("reconst.in",ios::in);
out.open("reconst.out",ios::out);
in>>n>>m;
for(i=1;i<=m;i++)
  in>>s[1][i]>>s[2][i]>>s[0][i];

msort(1,m);
for(i=1;i<=m-1;i++)
  if(s[1][i]==s[1][i+1] && s[2][i]+1==s[2][i+1]) x[s[2][i+1]]=s[0][i+1]-s[0][i];
  else if(s[2][i]==s[2][i+1] && s[1][i]+1==s[1][i+1]) x[s[1][i]]=s[0][i]-s[0][i+1];
j=m;
for(i=n;i>=1;i--)
  if(x[i]==0)
    {
    while(s[1][j]>i) j--;
    if(s[1][j]==i)
      {
      sm=0;
      for(k=i+1;k<=s[2][j];k++)
	sm=sm+x[k];
      x[i]=s[0][j]-sm;
      }
    }
for(i=1;i<=n;i++)
  out<<x[i]<<" ";
in.close();
out.close();
return 0;
}