Wednesday, 26 July 2017

Lightoj 1085 All Possible Increasing Subsequences

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define N 100005
  4. #define MOD 1000000007
  5. int a[N], b[N];
  6. int tree[N];
  7. int query(int idx){
  8.        long long  sum=0;
  9.        while(idx>0){
  10.              sum+=tree[idx];
  11.              sum%=MOD;
  12.              idx -= idx & (-idx);
  13.        }
  14.        return (int) sum%MOD;
  15. }
  16. void update(int idx, int x, int n) //n is the size of the array, x is the number to add
  17. {
  18.        while(idx<=n){
  19.              tree[idx]+=x;
  20.              tree[idx]%=MOD;
  21.              idx += idx & (-idx);
  22.        }
  23. }
  24. int main(){
  25.     int ts;
  26.     scanf("%d"&ts);
  27.     for(int p = 1; p <= ts; p++){
  28.     memset(tree, 0sizeof(tree));
  29.     int n;
  30.     scanf("%d"&n);
  31.     for(int i = 0; i <n; i++){
  32.         scanf("%d"&a[i]);
  33.         b[i] = a[i];
  34.     }
  35.     map<intint>mp;
  36.     sort(b, b+n);
  37.     int cnt = 2;
  38.     mp[b[0]] = 1;
  39.     for(int i = 1; i <n; i++){
  40.         if(b[i] != b[i-1]){
  41.             mp[b[i]] = cnt;
  42.             cnt++;
  43.         }
  44.     }
  45.     for(int i = 0; i <n; i++){
  46.         update(mp[a[i]](query(mp[a[i]]-1)+1)%MOD,n);
  47.        
  48.        
  49.     }
  50.     printf("Case %d: %d\n",p,query(n)%MOD);
  51.     }
  52.     return 0;
  53. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...