[关闭]
@VecMD 2016-07-13T20:46:10.000000Z 字数 878 阅读 1170

2015 CCPC

  1. #include <map>
  2. #include <cstdio>
  3. #include <utility>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <algorithm>
  7. const int maxn = 1007;
  8. const int mo = 1e9+7;
  9. int n, m;
  10. int a[maxn], b[maxn];
  11. long long bit[maxn][maxn];
  12. void add(int j, int k, long long add)
  13. {
  14. for(k; k <= n; k += -k & k){
  15. bit[j][k] = (bit[j][k] + add) % mo;
  16. }
  17. }
  18. long long sum(int j, int k){
  19. long long ret = 0ll;
  20. for(; k; k -= - k & k){
  21. ret = (ret + bit[j][k]) % mo;
  22. }
  23. return ret;
  24. }
  25. int main()
  26. {
  27. int T;
  28. scanf("%d", &T);
  29. for(int ti = 1; ti <= T; ti ++){
  30. std::map<int, int> map;
  31. memset(bit, 0, sizeof(bit));
  32. scanf("%d %d", &n, &m);
  33. for(int i = 1; i <= n; i ++){
  34. scanf("%d", &a[i]);
  35. b[i] = a[i];
  36. }
  37. int count = 0;
  38. std::sort(b+1, b+n+1);
  39. for(int i = 1; i <= n; i ++){
  40. if(b[i] > b[i - 1]) map[b[i]] = ++count;
  41. else map[b[i]] = count;
  42. }
  43. for(int i = 1; i <= n; i ++){
  44. add(1, map[a[i]], 1);
  45. for(int j = 2; j <= m; j ++){
  46. long long temp = sum(j - 1, map[a[i]] - 1) % mo;
  47. add(j, map[a[i]], temp);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注