Submission #154003

#TimeUsernameProblemLanguageResultExecution timeMemory
154003nicolaalexandraRelativnost (COCI15_relativnost)C++14
126 / 140
4026 ms26752 KiB
/// bn ca trimit de 3 ori de 0 ca nu stiu sa fac o citire #include <iostream> #define DIM 100010 #define MOD 10007 using namespace std; int aint[3*DIM][23]; 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; aint[nod][1] = nr[st].first; /// 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<=c;j++){ int val = i+j; if (val > c) val = c; aint[nod][val] = (aint[nod][val] + 1LL*aint[nod<<1][i]*aint[(nod<<1)|1][j]%MOD)%MOD; }}} void update (int nod, int st, int dr, int poz){ if (st == dr){ aint[nod][0] = nr[poz].second; aint[nod][1] = nr[poz].first; return; } int mid = (st+dr)>>1; if (poz <= mid) update (nod<<1,st,mid,poz); else update ((nod<<1)|1,mid+1,dr,poz); for (int i=0;i<=c;i++) aint[nod][i] = 0; for (int i=0;i<=c;i++){ for (int j=0;j<=c;j++){ int val = i+j; if (val > c) val = c; aint[nod][val] = (aint[nod][val] + 1LL*aint[nod<<1][i]*aint[(nod<<1)|1][j]%MOD)%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; nr[poz] = make_pair(a%MOD,b%MOD); update (1,1,n,poz); cout<<aint[1][c]<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...