#include <bits/stdc++.h>
#define DIMN 1000010
using namespace std;
int aib1[DIMN] , aib2[DIMN] , v[DIMN] , w[DIMN] , ok[DIMN] , aux[DIMN] , p[DIMN];
void update (int aib[] , int i , int x){
for (;i<=1000000;i = i + (i & (-i)))
aib[i]+=x;
}
int query (int aib[] , int i){
int sol = 0;
if (!i)
return 0;
for (;i;i = i - (i & (-i)))
sol+=aib[i];
return sol;
}
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int n , m , i , x, elem = 0 , j , l , st , dr , mid , sol = 0;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=n;i++){ /// faci asta pt ca v e clar permutare
fscanf (fin,"%d",&x);
v[x] = i;
}
/// acum e mom sa citesc pe w si sa il normalizez
for (i=1;i<=m;i++){
fscanf (fin,"%d",&w[i]);
aux[i] = w[i];
}
sort (aux + 1 , aux + m + 1);
elem = 0;
for (i=1;i<=m;i++){
if (!elem || aux[i] != aux[i-1])
aux[++elem] = aux[i];
}
for (i=1;i<=m;i++){
st = 1;
dr = elem;
while (st <= dr){
mid = (st + dr)/2;
if (aux[mid] == w[i]){
w[i] = mid;
break;
}
else if (aux[mid] < w[i])
st = mid + 1;
else dr = mid - 1;
}
}
/// ai normalizat
/// aib1 e pt l , aib2 e pt i
l = 0;
for (i=2;i<=n;i++){
while (l && query(aib1 , v[l+1]) != query(aib2 , v[i])){
for (j = p[l] + 1 ; j <= l ; j++){ /// anulezi
update (aib1 , v[j] , -1);
update (aib2 , v[i - l + j - p[l] - 1] , -1);
}
l = p[l];
}
if (query(aib1 , v[l+1]) == query(aib2 , v[i])){
l++;
update (aib1 , v[l] , 1);
update (aib2 , v[i] , 1);
}
p[i] = l;
}
memset (aib1 , 0 , sizeof(aib1));
memset (aib2 , 0 , sizeof(aib2));
/// aib1 e pt l , aib2 e pt i
l = 0;
sol = 0;
for (i=1;i<=m;i++){
//if (i == 35)
// printf ("a");
while (l && query(aib1 , v[l+1]) != query(aib2 , w[i])){
for (j = p[l] + 1 ; j <= l ; j++){ /// anulezi
update (aib1 , v[j] , -1);
update (aib2 , w[i - l + j - p[l] - 1] , -1);
}
l = p[l];
}
if (query(aib1 , v[l+1]) == query(aib2 , w[i])){
l++;
update (aib1 , v[l] , 1);
update (aib2 , w[i] , 1);
}
if (l == n){
ok[++sol] = i - l + 1;
for (j = p[l] + 1 ; j <= l ; j++){ /// anulezi
update (aib1 , v[j] , -1);
update (aib2 , w[i - l + j - p[l]] , -1);
//printf ("%d " , i - l + j - p[l]);
}
l = p[l];
}
}
fprintf (fout,"%d\n",sol);
for (i=1;i<=sol;i++)
fprintf (fout,"%d " , ok[i]);
return 0;
}
Compilation message
mat.cpp: In function 'int main()':
mat.cpp:25:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf (fin,"%d%d",&n,&m);
~~~~~~~^~~~~~~~~~~~~~~~~~
mat.cpp:27:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf (fin,"%d",&x);
~~~~~~~^~~~~~~~~~~~~
mat.cpp:34:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
fscanf (fin,"%d",&w[i]);
~~~~~~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
8184 KB |
Output is correct |
2 |
Correct |
9 ms |
8312 KB |
Output is correct |
3 |
Correct |
9 ms |
8184 KB |
Output is correct |
4 |
Correct |
9 ms |
8184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
8184 KB |
Output is correct |
2 |
Correct |
10 ms |
8184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
19 ms |
8540 KB |
Output is correct |
2 |
Correct |
18 ms |
8440 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
8568 KB |
Output is correct |
2 |
Correct |
19 ms |
8440 KB |
Output is correct |
3 |
Correct |
10 ms |
8184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
102 ms |
11384 KB |
Output is correct |
2 |
Correct |
95 ms |
11000 KB |
Output is correct |
3 |
Correct |
156 ms |
12484 KB |
Output is correct |
4 |
Correct |
157 ms |
12428 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
111 ms |
12024 KB |
Output is correct |
2 |
Correct |
142 ms |
11776 KB |
Output is correct |
3 |
Correct |
115 ms |
12112 KB |
Output is correct |
4 |
Correct |
111 ms |
13048 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
109 ms |
12124 KB |
Output is correct |
2 |
Correct |
107 ms |
11728 KB |
Output is correct |
3 |
Correct |
125 ms |
11900 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
629 ms |
21668 KB |
Output is correct |
2 |
Correct |
1264 ms |
40312 KB |
Output is correct |
3 |
Correct |
499 ms |
22136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
614 ms |
21376 KB |
Output is correct |
2 |
Correct |
753 ms |
22796 KB |
Output is correct |
3 |
Correct |
1231 ms |
36732 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
560 ms |
20188 KB |
Output is correct |
2 |
Correct |
520 ms |
33500 KB |
Output is correct |
3 |
Correct |
664 ms |
26340 KB |
Output is correct |
4 |
Correct |
741 ms |
38376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
531 ms |
20728 KB |
Output is correct |
2 |
Correct |
658 ms |
26864 KB |
Output is correct |
3 |
Correct |
263 ms |
17128 KB |
Output is correct |
4 |
Correct |
805 ms |
38036 KB |
Output is correct |