Advertisement
Guest User

NrSubCresc_nu sigur

a guest
Nov 12th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MOD 666013
  3. #define LG(p) ((-p)&p)
  4. #define NR 200001
  5. using namespace std;
  6. ifstream fin("nrsubcresc.in");
  7. int mod(int a, int n)
  8. {
  9.     a %= n;
  10.     if (a < 0) a += n;
  11.     return a;
  12. }
  13.  
  14. int i, j, n, act, nou, nr[4*NR+5], P;
  15. int CNT[4*NR+5], MDR[3][4*NR+5], S;
  16.  
  17. int query(int poz)
  18. {
  19.     int S=0;
  20.     for(int i=poz; i>=1; i-=LG(i))
  21.         S= mod( S+CNT[i], MOD);
  22.     return S;
  23. }
  24. void update(int poz, int val)
  25. {
  26.     for(int i=poz; i<=NR; i+=LG(i))
  27.         CNT[i]=mod(CNT[i] + val, MOD);
  28. }
  29. int main ()
  30. {
  31.     fin>>n>>P;
  32.     for (i=1; i<=n; ++i)
  33.     {
  34.         fin>>nr[i];
  35.         nr[i]+=2;
  36.     }
  37.  
  38.     act=0;
  39.     for(i=1; i<=n; ++i)
  40.         MDR[act][i]=1;
  41.  
  42.     for(int p=2; p<=P; ++p)
  43.     {
  44.         nou=1-act;
  45.         memset(CNT, 0, sizeof(CNT));
  46.         memset(MDR[nou], 0, sizeof(MDR[nou]));
  47.         for(i=1; i<=n; ++i)
  48.         {
  49.             S=query(nr[i]-1);
  50.             MDR[nou][i]=S;
  51.             update(nr[i], MDR[act][i]);
  52.         }
  53.         act=nou;
  54.     }
  55.     S=0;
  56.     for(i=1; i<=n; ++i)
  57.         S=mod(S + MDR[act][i], MOD);
  58.     cout<<S;
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement