Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 1 addition & 33 deletions ST1.cpp → ST1.c
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
#include <stdio.h>
#include <stdlib.h>

// Stack is represented using linked list
struct stack
{
int data;
struct stack *next;
};

// Utility function to initialize stack
void initStack(struct stack **s)
{
*s = NULL;
}

// Utility function to chcek if stack is empty
int isEmpty(struct stack *s)
{
if (s == NULL)
return 1;
return 0;
}

// Utility function to push an item to stack
void push(struct stack **s, int x)
{
struct stack *p = (struct stack *)malloc(sizeof(*p));
Expand All @@ -38,63 +34,43 @@ p->next = *s;
*s = p;
}

// Utility function to remove an item from stack
int pop(struct stack **s)
{
int x;
struct stack *temp;

x = (*s)->data;
temp = *s;
(*s) = (*s)->next;
free(temp);

return x;
}

// Function to find top item
int top(struct stack *s)
{
return (s->data);
}

// Recursive function to insert an item x in sorted way
void sortedInsert(struct stack **s, int x)
{
// Base case: Either stack is empty or newly inserted
// item is greater than top (more than all existing)
if (isEmpty(*s) || x > top(*s))
{
push(s, x);
return;
}

// If top is greater, remove the top item and recur
int temp = pop(s);
sortedInsert(s, x);

// Put back the top item removed earlier
push(s, temp);
}

// Function to sort stack
void sortStack(struct stack **s)
{
// If stack is not empty
if (!isEmpty(*s))
{
// Remove the top item
int x = pop(s);

// Sort remaining stack
sortStack(s);

// Push the top item back in sorted stack
sortedInsert(s, x);
}
}

// Utility function to print contents of stack
void printStack(struct stack *s)
{
while (s)
Expand All @@ -105,29 +81,21 @@ s = s->next;
printf("\n");
}

// Driver Program
int main()
{
int n,i;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++)
scanf("%d",&arr[i]);

struct stack *top;

initStack(&top);
for(i=0;i<n;i++)
push(&top,arr[i]);

printf("Stack elements before sorting:\n");
printStack(top);

sortStack(&top);
// printf("\n");

printf("Stack elements after sorting:\n");
printStack(top);

return 0;
}
}
35 changes: 35 additions & 0 deletions ST4.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#include<stdio.h>
void calculateSpan(int price[], int n, int S[])
{
S[0] = 1;
int i;
for ( i = 1; i < n; i++)
{
S[i] = 1;
int j;
for ( j = i-1; (j>=0)&&(price[i]>=price[j]); j--)
S[i]++;
}
}

void printArray(int arr[],int n)
{
int i;
for ( i = 0; i < n; i++)
printf("%d ", arr[i]);
}

int main()
{
int size,i,q,price[100];
scanf("%d",&size);
for(i=0;i<size;i++)
{
scanf("%d",&price[i]);
}
int n = (4*size)/sizeof(price[0]);
int S[n];
calculateSpan(price, n, S);
printArray(S, n);
return 0;
}
51 changes: 0 additions & 51 deletions ST4.cpp

This file was deleted.

61 changes: 61 additions & 0 deletions TR2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include<bits/stdc++.h>
using namespace std;
void MERG(int x,int y);
int FIND_root(int i);
int root(int arr[], int i)
{

while(arr[i] != i)
{
i = arr[i];
arr[i] = arr[arr[i]];

}
return i;
}

void un(int arr[],int size[], int a, int b)
{
int pa = root(arr,a);
int pb = root(arr,b);

if(pa==pb) return;

if(size[pa] > size[pb])
{
arr[pb] = pa;
size[pa] += size[pb];
size[pb] = 0;
}
else
{
arr[pa] = arr[pb];
size[pb] += size[pa];
size[pa] =0;
}
}
int main()
{
int n,m;
cin>>n>>m;
int arr[n+1];
int size[n+1];
for(int i=1;i<=n;i++)
{
arr[i] = i;
size[i] = 1;
}
while(m--)
{
int x,y;
cin>>x>>y;
un(arr,size,x,y);

}
for(int i=1;i<=n;i++)
{
cout<<size[root(arr,i)]-1<<" ";
}
cout<<endl;
return 0;
}
74 changes: 74 additions & 0 deletions TRE14.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include<bits/stdc++.h>
using namespace std;
#define watch(x) cout << (#x) << " is " << (x) << "\n"
#define pow2(x) ((x)*(x))
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
#define ll long long int
#define eb emplace_back
#define pb push_back
#define mod 1000000007
#define mp make_pair
#define ff first
#define ss second
#define all(c) (c).begin(),(c).end()
#define nl "\n"
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector< vi > vvi;
typedef vector< vl > vvl;
typedef pair< int,int > ii;
typedef pair< ll,ll> pll;
typedef map< ll,ll> mll;
typedef map< int,int> mii;
struct node *rightside;
struct node *leftside;
void inorder(ll ar[],vl &v,ll n,ll i)
{
if(i>=n)
return;
inorder(ar,v,n,2*i+1);
v.eb(ar[i]);
inorder(ar,v,n,2*i+2);
}
ll minSwap(vl &v)
{
vector<pll> v1(v.size());
ll ans = 0ll;
ll n = v.size();
for(int i=0;i<n;i++)
{
v1[i].ff = v[i];
v1[i].ss = i;
}
sort(all(v1));
for(int i=0;i<n;i++)
{
if(i==v1[i].ss)
continue;
else
{
swap(v1[i].ff,v1[v1[i].ss].ff);
swap(v1[i].ss,v1[v1[i].ss].ss);
}
if(i!=v1[i].ss)
i--;
ans++;
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll n;
cin >> n;
ll ar[n];
for(int i=0;i<n;i++)
cin >> ar[i];
vl v;
inorder(ar,v,n,0);
cout << minSwap(v) << nl;
return 0;
}