cf1151e number of components

Posted hs-black

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1151e number of components相关的知识,希望对你有一定的参考价值。

很常见的思想:将整体求改为统计每个部分的贡献

本题中统计[l, r]时, 每个连通块有一个重要特征, 最右端的数在[l,r]中而下一个数不在(好像是句废话

那么我们分别考虑每个点对连通块的贡献, 即它是某个连通块的右端点, 这样可以保证每个连通块只会被算一次

对于序列 (a_1a_2cdots a_n)(a_i < a_{i+1}) l的范围是1~(a_i) r的范围是(a_i) ~ $ a_j-1$ ans += (a[i+1] - a[i]) * a[i];

否则 同理 ans += (n-a[i]+1) * (a[i] - a[i+1]);

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
template <typename T>
void read(T &x) {
    x = 0;int f = 1;
    char c = getchar();
    for (;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for (;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    x *= f;
}
const int N = 100050;
ll n, a[N], ans;
int main() {
    read(n);
    for (int i = 1;i <= n; i++) read(a[i]);
    for (int i = 1;i <= n; i++) {
        if (a[i+1] > a[i]) 
            ans += (a[i+1] - a[i]) * a[i];
        else ans += (n-a[i]+1) * (a[i] - a[i+1]);
    }
    cout << ans << endl;
    return 0;
}

以上是关于cf1151e number of components的主要内容,如果未能解决你的问题,请参考以下文章

CF1270H. Number of Components

CF804B Minimum number of steps

CF 466C Number of Ways(数学 / 思维 / DP)

CF804B Minimum number of steps

CF585F Digits of Number Pi

CF585F Digits of Number Pi