Submission #153984

#TimeUsernameProblemLanguageResultExecution timeMemory
153984nicolaalexandraRelativnost (COCI15_relativnost)C++14
0 / 140
209 ms19372 KiB
#include <iostream> #define DIM 100010 #define MOD 10007 using namespace std; int aint[DIM][30]; 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+1] - sa am cel putin c+1 pers care ia tablou for (int i=0;i<=c+1;i++){ for (int j=0;j<=c+1;j++){ int val = i+j; if (val > c+1) val = c+1; if (val > (dr-st+1)) continue; 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+1;i++) aint[nod][i] = 0; for (int i=0;i<=c+1;i++){ for (int j=0;j<=c+1;j++){ int val = i+j; if (val > c+1) val = c+1; 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>>a>>b; nr[i] = make_pair(a,b); } build (1,1,n); cin>>q; for (;q--;){ cin>>poz>>a>>b; nr[poz] = make_pair(a,b); update (1,1,n,poz); cout<<(aint[1][c]+aint[1][c+1])%MOD<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...