#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MOD 1000000007 #define ADD(X,Y) ((X) = ((X) + (Y)%MOD) % MOD) typedef long long i64; typedef vector ivec; typedef vector svec; typedef pair pi; int dd[] = { 0, 1, 0, -1, 0 }; int N; pi P[114514]; string S[114514]; int ID[114514]; #define M 200010 #define K 18 int st[K][M]; int lcp[114514]; void construct(int *a, int n) { copy_n(a, n, st[0]); for (int k = 1; k < K; k++) { for (int i = 0; i + (1 << k) <= n; i++) { st[k][i] = min(st[k - 1][i], st[k - 1][i + (1 << (k - 1))]); } } } int query(int a, int b) { int k = 31 - __builtin_clz(b - a); return min(st[k][a], st[k][b - (1 << k)]); } int main() { cin >> N; for (int i = 0; i < N; i++) { cin >> S[i]; P[i] = { S[i] , i }; } sort(P, P + N); sort(S, S + N); for (int i = 0; i < N; i++) { ID[P[i].second] = i; } for(int i=1;i> W >> x >> d; i64 ans = 0; for(int i =0; iQ) swap(P,Q); else Q++; int a = ID[P]; int b = ID[Q]; if(a> b)swap(a, b); //cout << P << " " << Q << endl; //cout << a << " " << b << endl; ans += query(a,b); //cout << ans << endl; x = (x +d)% ((i64)N * (N-1)); } cout << ans << endl; return 0; }