Alx09

ex18

Apr 30th, 2020
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int v[100005], maxim[100005];
  4.  
  5. void lungMax(int n) { // am cautat pe net despre programarea dimanica
  6. int i, j, valMax;
  7. maxim[n - 1] = 1;
  8. for (i = n - 2; i >= 0; i--) { // complexitate O(n^2 /2) -> limita de timp 5s
  9. maxim[i] = 1;
  10. for (j = i + 1; j < n; j++) {
  11. if (v[i] <= v[j] && maxim[i] <= maxim[j])
  12. maxim[i] = maxim[j] + 1;
  13. }
  14. }
  15. valMax = maxim[n - 1];
  16. for (i = n - 2; i; i--) // elementele mereu trebuie sa fie valoarea maxima pana la pozitia curenta
  17. if (maxim[i] < valMax)
  18. maxim[i] = valMax;
  19. else
  20. valMax = maxim[i];
  21. }
  22.  
  23. int main() {
  24.  
  25. int l, n = 0, k;
  26. FILE *f, *g;
  27. char s[2];
  28. f = fopen("in.txt", "r");// deschidere in mod citire
  29. while (fscanf(f, "%d%[\n]s", &v[n++], &s) == 1);// niste batai de cap am avut totusi cu fscanf
  30.  
  31. fscanf(f, "%d", &l);
  32. lungMax(n);
  33. g = fopen("out.txt", "w");
  34. while (l) {
  35. fscanf(f, "%d", &k);
  36. fprintf(g, "%d\n", maxim[k + 1]); // acum in maxim se afla pentru fiecare din index din sir
  37. l--; // subsirul maxim asa ca e destul de rapid algoritmul
  38. }
  39. fclose(f);
  40. fclose(g);
  41. return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment