Submission #154031

#TimeUsernameProblemLanguageResultExecution timeMemory
154031nicolaalexandraRelativnost (COCI15_relativnost)C++14
70 / 140
1230 ms27948 KiB
#include <iostream> #define DIM 100002 #define MOD 10007 using namespace std; int aint[2*DIM][22]; pair <int,int> nr[DIM]; int n,i,q,a,b,c,poz; void build (int nod, int st, int dr){ if (st == dr){ aint[nod][0] = nr[st].second%MOD; aint[nod][1] = nr[st].first%MOD; /// am o sg pers care ia tablou colorat return; } int mid = (st+dr)>>1; build (nod<<1,st,mid); build ((nod<<1)|1,mid+1,dr); /// aint[i][j] j < c - sa am exact j pers care ia tablou, restul nu /// aint[i][c+] - sa am cel putin c pers care ia tablou for (int i=0;i<=c;i++) aint[nod][i] = 0; for (int i=0;i<=c;i++){ for (int j=0;j<=i;j++){ int val = i+j; if (i < c) aint[nod][i] = (aint[nod][i] + aint[nod<<1][j]*aint[(nod<<1)|1][i-j])%MOD; if (val >= c){ val = c; aint[nod][val] = (aint[nod][val] + aint[nod<<1][i]*aint[(nod<<1)|1][j])%MOD; if (i != j) aint[nod][val] = (aint[nod][val] + aint[nod<<1][j]*aint[(nod<<1)|1][i])%MOD; }}}} void update (int nod, int st, int dr, int poz, int a, int b){ if (st == dr){ aint[nod][0] = b; aint[nod][1] = a; return; } int mid = (st+dr)>>1; if (poz <= mid) update (nod<<1,st,mid,poz,a,b); else update ((nod<<1)|1,mid+1,dr,poz,a,b); for (int i=0;i<=c;i++) aint[nod][i] = 0; for (int i=0;i<=c;i++){ for (int j=0;j<=i;j++){ int val = i+j; if (i < c) aint[nod][i] = (aint[nod][i] + aint[nod<<1][j]*aint[(nod<<1)|1][i-j])%MOD; if (val >= c) { val = c; aint[nod][val] = (aint[nod][val] + aint[nod<<1][i]*aint[(nod<<1)|1][j])%MOD; if (i != j) aint[nod][val] = (aint[nod][val] + aint[nod<<1][j]*aint[(nod<<1)|1][i])%MOD; }}}} int main (){ cin>>n>>c; for (i=1;i<=n;i++) cin>>nr[i].first; for (i=1;i<=n;i++) cin>>nr[i].second; build (1,1,n); cin>>q; for (;q--;){ cin>>poz>>a>>b; update (1,1,n,poz,a%MOD,b%MOD); cout<<aint[1][c]<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...