# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
840291 |
2023-08-31T09:30:37 Z |
Dec0Dedd |
Matching (CEOI11_mat) |
C++14 |
|
554 ms |
65536 KB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const int N = 1e6+10;
const ll P = 2137;
const int MOD = 1e9+7;
struct V {
ll sum, pwsum, cnt;
V() {sum=pwsum=cnt=0;};
};
struct segtree {
vector<V> t;
vector<ll> lz;
void init(int k) {
int sz=1;
while (sz < 4*k) sz*=2;
t.resize(sz), lz.resize(sz);
}
void push(int v) {
lz[2*v]+=lz[v], lz[2*v+1]+=lz[v];
t[2*v].sum+=t[2*v].pwsum*lz[v];
t[2*v+1].sum+=t[2*v+1].pwsum*lz[v];
lz[v]=0;
}
V mrg(V a, V b) {
V res;
res.sum=(a.sum+b.sum)%MOD, res.cnt=(a.cnt+b.cnt)%MOD, res.pwsum=(a.pwsum+b.pwsum)%MOD;
return res;
}
void upd(int v, int l, int r, int ql, int qr, int val) {
if (l > qr || r < ql) return;
if (l >= ql && r <= qr) {
t[v].sum+=val*t[v].pwsum, lz[v]+=val;
if (l < r) push(v);
return;
} int m=(l+r)/2; push(v);
upd(2*v, l, m, ql, qr, val), upd(2*v+1, m+1, r, ql, qr, val);
t[v]=mrg(t[2*v], t[2*v+1]);
}
V que(int v, int l, int r, int ql, int qr) {
if (l > qr || r < ql) return V();
if (l >= ql && r <= qr) return t[v];
int m=(l+r)/2; push(v);
return mrg(que(2*v, l, m, ql, qr), que(2*v+1, m+1, r, ql, qr));
}
void st(int v, int l, int r, int p, V x) {
if (l == r) {
t[v]=x;
return;
} int m=(l+r)/2; push(v);
if (p <= m) st(2*v, l, m, p, x);
else st(2*v+1, m+1, r, p, x);
t[v]=mrg(t[2*v], t[2*v+1]);
}
};
ll tmp[N], s[N], a[N], p[N], n, m;
ll bpw(ll x, ll n) {
if (n == 0) return 1;
ll c=bpw(x, n/2);
(c=c*c)%=MOD;
if (n&1) return (c*x)%MOD;
return c;
}
ll inv(ll x) {
return bpw(x, MOD-2);
}
set<int> ss;
map<int, int> sc;
segtree t;
void add(int i) {
ll z=t.que(1, 1, m, 1, a[i]-1).cnt+1;
V x; x.cnt=1, x.pwsum=p[i], x.sum=p[i]*z;
t.upd(1, 1, m, a[i], m, 1); t.st(1, 1, m, a[i], x);
}
void rem(int i) {
t.upd(1, 1, m, a[i]+1, m, -1);
t.st(1, 1, m, a[i], V());
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>m;
for (int i=1; i<=n; ++i) cin>>tmp[i], s[tmp[i]]=i;
for (int i=1; i<=m; ++i) {
cin>>a[i];
ss.insert(a[i]);
}
int i=1;
for (auto u : ss) sc[u]=i++;
for (int i=1; i<=m; ++i) a[i]=sc[a[i]];
p[0]=1, p[1]=P;
for (int i=2; i<N; ++i) p[i]=(p[i-1]*P)%MOD;
t.init(m+10);
ll h=0;
for (int i=1; i<=n; ++i) (h+=s[i]*p[i])%=MOD;
for (int i=1; i<=n; ++i) add(i);
vector<int> ans;
for (int i=n; i<=m; ++i) {
ll hp=(t.t[1].sum*inv(p[i-n]))%MOD;
(hp+=MOD)%=MOD;
if (h == hp) ans.push_back(i-n+1);
if (i+1 <= m) rem(i-n+1), add(i+1);
}
cout<<ans.size()<<"\n";
for (auto u : ans) cout<<u<<" ";
cout<<"\n";
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
8084 KB |
Output is correct |
2 |
Correct |
7 ms |
8136 KB |
Output is correct |
3 |
Correct |
7 ms |
8156 KB |
Output is correct |
4 |
Correct |
7 ms |
8148 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
8520 KB |
Output is correct |
2 |
Correct |
9 ms |
8396 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
37 ms |
14468 KB |
Output is correct |
2 |
Correct |
33 ms |
14164 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
38 ms |
14548 KB |
Output is correct |
2 |
Correct |
44 ms |
14512 KB |
Output is correct |
3 |
Correct |
14 ms |
9036 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
353 ms |
60488 KB |
Output is correct |
2 |
Correct |
371 ms |
61972 KB |
Output is correct |
3 |
Correct |
554 ms |
64360 KB |
Output is correct |
4 |
Correct |
498 ms |
64352 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
365 ms |
62920 KB |
Output is correct |
2 |
Correct |
553 ms |
63496 KB |
Output is correct |
3 |
Correct |
379 ms |
63360 KB |
Output is correct |
4 |
Correct |
386 ms |
64780 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
363 ms |
62648 KB |
Output is correct |
2 |
Correct |
352 ms |
63332 KB |
Output is correct |
3 |
Correct |
399 ms |
63248 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
280 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
288 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
320 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
317 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |