Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MOD 666013
- #define LG(p) ((-p)&p)
- #define NR 200001
- using namespace std;
- ifstream fin("nrsubcresc.in");
- int mod(int a, int n)
- {
- a %= n;
- if (a < 0) a += n;
- return a;
- }
- int i, j, n, act, nou, nr[4*NR+5], P;
- int CNT[4*NR+5], MDR[3][4*NR+5], S;
- int query(int poz)
- {
- int S=0;
- for(int i=poz; i>=1; i-=LG(i))
- S= mod( S+CNT[i], MOD);
- return S;
- }
- void update(int poz, int val)
- {
- for(int i=poz; i<=NR; i+=LG(i))
- CNT[i]=mod(CNT[i] + val, MOD);
- }
- int main ()
- {
- fin>>n>>P;
- for (i=1; i<=n; ++i)
- {
- fin>>nr[i];
- nr[i]+=2;
- }
- act=0;
- for(i=1; i<=n; ++i)
- MDR[act][i]=1;
- for(int p=2; p<=P; ++p)
- {
- nou=1-act;
- memset(CNT, 0, sizeof(CNT));
- memset(MDR[nou], 0, sizeof(MDR[nou]));
- for(i=1; i<=n; ++i)
- {
- S=query(nr[i]-1);
- MDR[nou][i]=S;
- update(nr[i], MDR[act][i]);
- }
- act=nou;
- }
- S=0;
- for(i=1; i<=n; ++i)
- S=mod(S + MDR[act][i], MOD);
- cout<<S;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement