Submission #79731

#TimeUsernameProblemLanguageResultExecution timeMemory
79731KLPPRelativnost (COCI15_relativnost)C++14
42 / 140
1266 ms33792 KiB
#include<iostream> #include<algorithm> #include<vector> using namespace std; typedef long long int lld; #define MOD 10007 int n,c; lld Segtree[400000][30]; lld A[100000]; lld B[100000]; void build(int a, int b, int node){ if(a==b){ for(int i=0;i<=c;i++){ Segtree[node][i]=0; } Segtree[node][0]=B[a]; Segtree[node][1]=A[a]; return; } int mid=(a+b)/2; build(a,mid,2*node); build(mid+1,b,2*node+1); for(int i=0;i<=c;i++){ Segtree[node][i]=0; } for(int i=0;i<=c;i++){ for(int j=0;j<=c;j++){ Segtree[node][min(i+j,c)]+=Segtree[2*node][i]*Segtree[2*node+1][j]; Segtree[node][min(i+j,c)]%=MOD; } } } void update(int a,int b, int node, int x){ //cout<<a<<" "<<b<<endl; if(x<a || b<x)return; if(a==b){ for(int i=0;i<=c;i++){ Segtree[node][i]=0; } Segtree[node][0]=B[a]; Segtree[node][1]=A[a]; return; } int mid=(a+b)/2; update(a,mid,2*node,x); update(mid+1,b,2*node+1,x); for(int i=0;i<=c;i++){ Segtree[node][i]=0; } for(int i=0;i<=c;i++){ for(int j=0;j<=c;j++){ Segtree[node][min(i+j,c)]+=Segtree[2*node][i]*Segtree[2*node+1][j]; Segtree[node][min(i+j,c)]%=MOD; } } } int main(){ cin>>n>>c; for(int i=0;i<n;i++)cin>>A[i]; for(int i=0;i<n;i++)cin>>B[i]; build(0,n-1,1); int q; cin>>q; while(q--){ int x; cin>>x; x--; lld y,z; cin>>y>>z; A[x]=y; B[x]=z; update(0,n-1,1,x); cout<<Segtree[1][c]<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...