Advertisement
Guest User

Untitled

a guest
Dec 20th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1.  
  2. #undef __STRICT_ANSI__
  3.  
  4. #include <cstdio>
  5. #include <iostream>
  6. #include <fstream>
  7. #include <sstream>
  8. #include <climits>
  9. #include <ctime>
  10. #include <cassert>
  11. #include <cstdlib>
  12. #include <algorithm>
  13. #include <cmath>
  14. #include <string>
  15. #include <vector>
  16. #include <queue>
  17. #include <deque>
  18. #include <set>
  19. #include <map>
  20. #include <bitset>
  21.  
  22. using namespace std;
  23.  
  24. #ifndef __GNUC__
  25.     typedef unsigned long int uint;
  26. #endif
  27.  
  28. typedef signed short int int16;
  29. typedef unsigned short int uint16;
  30. typedef signed long long int int64;
  31. typedef unsigned long long int uint64;
  32. typedef double real;
  33.  
  34. typedef pair<int, int> pii;
  35. typedef pair<int64, int64> pii64;
  36.  
  37. const int INF = INT_MAX;
  38. const int64 LINF = LLONG_MAX;
  39. const real EPS = 1e-9;
  40. const int MOD = 1000000007; // 10**9 + 7
  41. const int MAXN = 100001;
  42. const int ALPH = 26; // Latin alphabet size
  43. const int DALPH = 52; // Double Latin alphabet size
  44.  
  45. #define mp(a, b) make_pair((a), (b))
  46. #define all(a) (a).begin(), (a).end()
  47. #define szof(a) (int)(a).size()
  48.  
  49. #define pub(a) push_back(a)
  50. #define pob() pop_back()
  51. #define puf(a) push_front(a)
  52. #define pof() pop_front()
  53.  
  54. #ifdef _WIN32
  55.   #define LLD "%I64d"
  56. #else
  57.   #define LLD "%lld"
  58. #endif
  59.  
  60. #ifdef DEBUG
  61.   #define _show(var) cerr << #var << " = " << var << endl;
  62. #else
  63.   #define _show(var) (void)42
  64. #endif
  65.  
  66. #define TASK "subsequences"
  67.  
  68. #define MAXA 100000
  69.  
  70. int n;
  71. vector<int> seq;
  72.  
  73. int main() {
  74.   #ifndef DEBUG
  75.     freopen(TASK".in", "r", stdin);
  76.     freopen(TASK".out", "w", stdout);
  77.   #endif
  78.    
  79.   scanf("%d", &n);
  80.   seq.resize(n);
  81.    
  82.   for (int i = 0; i < n; ++i) {
  83.     scanf("%d", &seq[i]);
  84.   }
  85.    
  86.   int ans = 0;
  87.    
  88.   vector<int> cnt(MAXA + 1);
  89.   int sum = 0;
  90.    
  91.   for (int i = 0; i < n; ++i) {
  92.     ++cnt[0];
  93.     sum = (sum + 1) % MOD;
  94.      
  95.     int add = (1ll * MOD + sum - cnt[seq[i]]) % MOD;
  96.     cnt[seq[i]] = sum;
  97.     sum = (sum + add) % MOD;
  98.      
  99.     ans = (ans + sum) % MOD;
  100.   }
  101.    
  102.   printf("%d\n", ans);
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement