#include using namespace std; typedef long long lld; int lllhj() { lld n; cin >> n; lld a[n]; for(lld i = 0;i < n;i++) cin >> a[i]; sort(a,a+n); lld j = 0,ans = 0; for(lld i = n -1;i >= 0;i--) { ans += a[i]*(lld)pow(2,j); j++; } cout << ans; return 0; } lld pre[100005]; //---constructing prefix-suffix matching array pre[] template< class T> void prefix(T pat[],lld m) { lld j=0; pre[0]=0; lld i=1; while(i int kmp(T src[],lld n,T pat[],lld m) { prefix(pat,m); lld i=0,j=0,ans=0; while(i> n; vector > v(n); for (lld i = 0;i < n;i++) { cin >> v[i].first; } for (lld i = 0;i < n;i++) { cin >> v[i].second; } /*for (lld i = 0;i < n;i++) { cout<< v[i].first << " " << v[i].second << "\n"; }*/ lld q; cin >> q; lld mx = LLONG_MIN; lld mn = LLONG_MAX; while (q--) { lld l, r; string s; cin >> l >> r >> s; lld ans1 = 0; lld ans2 = 0; for (lld i = l;i <= r;i++) { string res = v[i].first; string concat = res + "$" + s; get_Z_arr(concat); lld r=search_z(concat, res); lld val = r*v[i].second; //cout << val<<"\n"; ans1 = ans1 + val; } mx = max(mx, ans1); mn = min(mn, ans1); } cout << mn << " " << mx; }