All pastes #449464 Raw Edit

Something

public cpp v1 · immutable
·published 2007-04-20 06:47 UTC
rendered paste body
#include <iostream>#include <cstdlib>#include <set>using namespace std;struct element {    int value; //Wert    int index; //Index, der sich während des Programms ändert    const int start; //Startindex};struct cmp {    bool operator()(const struct element *a, const struct element *b) const {	if (a->value != b->value) {	    return a->value < b->value;	}	else {	    return a->index < b->index;	}    }};int main() {        int n;    cin >> n;    while (n != 0) {	struct element *nummer = new struct element[n]; //entsprechende viele Elemente erzeugen	int pos, dif, sum; 	struct element max;	sum = 0;	multiset<struct element *, cmp> zahlen;	//um aufs Maximum später schnell zugreifen zu können	//einlesen	for (int i = 0; i < n; i++) {	    cin >> nummer[i].value;	    nummer[i].index = i;	    nummer[i].start = i;	    zahlen.insert(&nummer[i]);	}	multiset<struct element *, cmp>::iterator it;	it = zahlen.end(); it--;	for (int i = n-1; i >= 0; i--) { //iteriert wird über die Stellen beginnend da, wo das Maximum stehen würde	    max = **it;	    it--;	    pos = max.index; //bestimme aktuelle Position des Maximums	    dif = i - pos; //Verschiebedistanz ausrechnen	    sum += dif; //Distanzen aufsummieren	    for (int j = max.start+1; j < n; j++) {		nummer[j].index--; //Indizes der Elemente angleichen, die nach dem Maximum im Feld stehen	    }	}	cout << sum << endl;	delete [] nummer;	cin >> n;    }    return 0;}