Informatică, întrebare adresată de alexalghisi, 9 ani în urmă

https://www.pbinfo.ro/?pagina=probleme&id=2684
Se dă un șir de n numere naturale. Șirul poate fi partiționat în mai multe moduri într-un număr de subșiruri strict crescătoare. De exemplu, șirul 4 6 2 5 8 1 3 7 poate fi partiționat astfel: 4 6 8 (primul subșir), 2 5 7 (al doilea) și 1 3 (al treilea). O altă modalitate este formând patru subșiruri: 4 5 7, 6 8, 2 3 și 1.


Cum se rezolva asta ?

Răspunsuri la întrebare

Răspuns de crystalnamed
2

Răspuns:

#include <iostream>

using namespace std;

int n, v[1001],l[1001],siruri,f[50000],i,j,k=1;

long long mx=-1000000000;

void citire(int v[],int &n)

{

   int i;

   cin>>n;

   for(i=1; i<=n; i++)

       cin>>v[i];

}

int main()

{

   citire(v,n);

   for(i=1; i<=n; i++)

   {

       mx=v[i];

       f[v[i]]++;

       if(f[v[i]]<2)

       {

           l[k++]=v[i];

           for(j=i+1; j<=n; j++)

           {

               if(v[j]>=mx)

               {

                   f[v[j]]++;

                   if(f[v[j]]<2 || v[j]==mx)

                   {

                       mx=v[j];

                       l[k++]=v[j];

                   }

               }

           }

           siruri++;

       }

   }

   cout<<siruri<<endl;

   for(i=1;i<k;i++)

      cout<<l[i]<<' ';

   return 0;

}

Explicație:


crystalnamed: cum
alexalghisi: Dude, limita e 1 ≤ n ≤ 100.000 .......
crystalnamed: #include

using namespace std;

int n, v[1001],l[1001],siruri,f[50000],i,j,k=1;
long long mx=-1000000000;

void citire(int v[],int &n)
{
int i;
cin>>n;
for(i=1; i<=n; i++)
cin>>v[i];
}

int main()
{
citire(v,n);
for(i=1; i<=n; i++)
{
mx=v[i];
f[v[i]]++;
if(f[v[i]]<2)
{
l[k++]=v[i];
for(j=i+1; j<=n; j++)
{
if(v[j]>=mx)
{
f[v[j]]++;
if(f[v[j]]<2 || v[j]==mx)
{
mx=v[j];
l[k++]=v[j];
}

}
}
siruri++;
}
}
cout< for(i=1;i cout< return 0;
}
crystalnamed: #include

using namespace std;
int v[100001],t[100001];
int main()
{int n,i,j,k=0,e,u,p=-1;
cin>>n;
for(i=0;i cin>>t[i];

v[k++]=t[0];
for(i=1;i if(t[i]<=v[k-1])v[k++]=t[i];
else{e=0;
u=k-1;
p=0;
while(e<=u){
j=(e+u)/2;
if(v[j] p=j;
u=j-1;
}
else e=j+1;
}
v[p]=t[i];
}
}
cout<}

Citește mai multe pe Brainly.ro - https://brainly.ro/tema/5602074#readmore
crystalnamed: asta am luat-o de pe brainly ca sa vezi diferenta
crystalnamed: poate a lui ii mai buna nu stiu
crystalnamed: decat a mea
crystalnamed: sau cea care am facut-o de pe pbinfo ii mai buna?
crystalnamed: care ii:#include

using namespace std;

int main()

{

int v[1001], n, i, j, subsiruri=0, x;

cin>>n;

for(i=1;i<=n;i++)

cin>>v[i];

while(n){

subsiruri++;

x=v[1];

for(j=1;j
v[j]=v[j+1];

n--;

for(i=1;i<=n;i++)

if(x
x=v[i];

for(j=i;j
v[j]=v[j+1];

n--;

i--;

}

}

cout<<'\n';

cout<
return 0;

}

asta ii a mea de pe pbinfo una dintre ele :)
alexalghisi: Dar asta are alte limite !! Ia vezi enuntul https://www.pbinfo.ro/?pagina=probleme&id=401
Alte întrebări interesante