hdu 3450 Counting Sequences

这个题的灵感来自与前几天做的一个题,思路想好之后,忽然发现自己好想会做这类题目了,不过还是要折腾老久,因为好多细节处理不好。 wa了好多好多次了,终于加了个mod就过了,尼玛。。。。。。 [code lang="cpp"] i64 query(int pos) {     i64 sum = 0 ;     while(pos > 0 )     {         sum += f[pos] %mod;         pos -= lowbit(pos);     }     return sum; } void update(int pos,i64 val) {     while(pos <= nn)     {         f[pos] += val % mod;         pos += lowbit(pos);     } } int main() {     while(scanf("%d%d",&n,&d)!=EOF)     {         nn1 = 0 ;         for(int i = 0 ; i < n ; i++)         {             RD(a[i]);             d1[nn1 ++ ] = a[i];             d1[nn1 ++ ] = a[i] - d - 1;             d1[nn1 ++ ] = a[i] + d;         }         sort(d1,d1+nn1);         nn = 0;         for(int i=1; i<nn1; i++)             if(d1[i] != d1[nn])                 d1[++nn] = d1[i];         for(int i=0; i<n; i++)         {             pos[i] = lower_bound(d1,d1+nn,a[i]) - d1 + 1;         }         clr(f,0);         clr(dp,0);         for(int i=0; i<n; i++)         {             int pos1,pos2;             i64 tmp1,tmp2,tmp;             pos1 = lower_bound(d1,d1+nn,a[i] + d ) - d1 + 1;             pos2 = lower_bound(d1,d1+nn,a[i] - d - 1  ) - d1 + 1;             tmp = query(pos1) - query(pos2) + mod + mod ;             dp[pos[i]] += tmp % mod;             update(pos[i],(tmp + 1) % mod );         }         i64 ans ;         ans = 0;         for(int i=1 ; i<=nn; i++) ans += dp[i] % mod;         PR(ans%mod);     }     return 0; } [/code]

原文地址:https://www.cnblogs.com/jh818012/p/3182679.html