Permutari circulare - Aproape rezolvata!

Am de rezolvat o problema in C++ cu permutari circulare.
Am reusit sa scriu codul, rezultatul este ok doar ca pe platforma imi da "Limită de timp depășită" si obtin doar 68 de puncte

Atasez codul mai jos. Ma poate ajuta cineva sa-mi explice unde gresesc?

Multumesc frumos!

Cerință
Considerăm un șir format din N elemente. Definim următoarele operații astfel:
permutare circulară la stânga: mutarea primului element la sfârșitul șirului 1 2 3 4 -> 2 3 4 1 -> 3 4 1 2
permutare circulară la dreapta: mutarea ultimului element la începutul șirului 1 2 3 4 -> 4 1 2 3 -> 3 4 1 2
Dându-se un șir format din N elemente și două numere K și P, să se permute cu K poziții la dreapta dacă P este -1, respectiv la stânga dacă P este 1.
Date de intrare
Pe prima linie se află 3numere: N , K și P. Pe următoarea linie se găsesc N numere naturale, reprezentând elementele șirului.

Date de ieșire
Se vor afișa N numere pe o singură linie, separate printr-un spațiu, reprezentând elementele șirului obținut în urma operațiilor de permutare.

Restricții
1 ≤ N ≤ 1 000 000
0 ≤ K ≤ 1 000 000

Elementele șirului sunt numere naturale cuprinse între 1 și 1.000
P poate avea doar valorile 1 și -1

EXEMPLU
Date de intrare
4 1 -1
1 2 3 4
Date de iesire
4 1 2 3

EXEMPLU
Date de intrare
4 2 1
1 2 3 4
Date de iesire
3 4 1 2

COD

#include
using namespace std;

int main(){
int i, n, v[1000001], aux = 0, p, z, k;
cin >> n >> z >> p;
for (i = 1; i <= n; ++i){
cin >> v[i];
}
if (p == -1)
for (k = 1; k <= z; ++k){
aux = v[n];
for (i = n; i >= 2; --i)
v[i] = v[i - 1];
v[1] = aux;
}else if (p == 1){
for (k = 1; k <= z; ++k){
aux = v[1];
for (i = 1; i <= n - 1; ++i)
v[i] = v[i + 1];
v[n] = aux;
}
}
for (i = 1; i <= n; ++i)
cout << v[i] << " ";
return 0;
}

Răspuns :

COROANA TE ROG!!!

#include<iostream>

using namespace std;

int main() {

   int n, p, k, v[1000001];

   cin >> n;

   for (int i = 1; i <= n; i++) cin >> v[i];

   cin >> k >> p;

   if (p == -1)

       while (k != 0) {

           int x = v[1];

           for (int i = 2; i <= n; i--) v[i - 1] = v[i];

           v[n] = x;

           k--;

       }

   else

       while (k != 0) {

           int x = v[n];

           for (int i = n - 1; i >= 1; i--) v[i + 1] = v[i];

           v[1] = x;

           k--;

       }

   for (int i = 1; i <= n; i++) cout << v[i] << ' ';

}