// Created by AboAbdoMC
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define db1(x) cout<<#x<<"="<<x<<'\n'
#define db2(x,y) cout<<#x<<"="<<x<<","<<#y<<"="<<y<<'\n'
#define db3(x,y,z) cout<<#x<<"="<<x<<","<<#y<<"="<<y<<","<<#z<<"="<<z<<'\n'
#define rep(i,n) for(int i=0;i<(n);++i)
#define repA(i,a,n) for(int i=a;i<=(n);++i)
#define repD(i,a,n) for(int i=a;i>=(n);--i)
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define lll long long
using namespace std;
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
const int OO = 1e4+7;
const int MOD = 1e4+7;
const int N = 1e5+7;
const int C = 21;
int n,c,q;
int a[N],b[N],st[N*2][C];
struct node {
int ll, rr, id;
node(int L, int R, int X) {
ll=L, rr=R, id=X;
}
node left()
{ return node(ll, (ll+rr)/2, id*2); }
node right()
{ return node((ll+rr)/2+1, rr, id*2+1); }
void update(int pos){ // don't need to call lazy_update() at the beginning
repA(i,0,c) st[id][i] = 0;
if (ll == rr)
{
st[id][0] = b[pos]%MOD;
st[id][1] = a[pos]%MOD;
return;
}
if (pos <= (ll+rr)/2) left().update(pos); // easier to read
else right().update(pos);
repA(i,0,c)
{
repA(j,0,c)
{
int k = min(i+j,c);
st[id][k] += (st[right().id][i]*st[left().id][j])%MOD;
st[id][k] %= MOD;
}
}
}
void build()
{
if (ll == rr)
{
st[id][0] = b[ll]%MOD;
st[id][1] = a[ll]%MOD;
return;
}
left().build();
right().build();
repA(i,0,c)
{
repA(j,0,c)
{
int k = min(i+j,c);
st[id][k] += (st[right().id][i]*st[left().id][j])%MOD;
st[id][k] %= MOD;
}
}
}
};
int main()
{
scanf("%d%d",&n,&c);
rep(i,n)
{
scanf("%d",&a[i]);
}
rep(i,n)
{
scanf("%d",&b[i]);
}
node(0,n-1,1).build();
scanf("%d",&q);
while(q--)
{
int p;
scanf("%d",&p);p--;
scanf("%d%d",&a[p],&b[p]);
node(0,n-1,1).update(p);
printf("%d\n",st[1][c]);
}
return 0;
}
Compilation message
relativnost.cpp: In function 'int main()':
relativnost.cpp:90:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&c);
~~~~~^~~~~~~~~~~~~~
relativnost.cpp:93:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&a[i]);
~~~~~^~~~~~~~~~~~
relativnost.cpp:98:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&b[i]);
~~~~~^~~~~~~~~~~~
relativnost.cpp:104:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&q);
~~~~~^~~~~~~~~
relativnost.cpp:108:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&p);p--;
~~~~~^~~~~~~~~
relativnost.cpp:109:11: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&a[p],&b[p]);
~~~~~^~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
504 KB |
Output is correct |
2 |
Correct |
19 ms |
504 KB |
Output is correct |
3 |
Correct |
36 ms |
504 KB |
Output is correct |
4 |
Correct |
614 ms |
11884 KB |
Output is correct |
5 |
Runtime error |
143 ms |
26728 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
6 |
Runtime error |
222 ms |
26616 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
7 |
Correct |
1370 ms |
12116 KB |
Output is correct |
8 |
Runtime error |
98 ms |
26616 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
9 |
Runtime error |
91 ms |
26628 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
10 |
Runtime error |
199 ms |
26620 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |