C. Monoblock

原题链接

题解

把美丽看成 1+有多少相邻的不同的连接块 这样就能贡献来做了

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll a[100005];

void solve()
{
    ll n,q;
    cin>>n>>q;

    for(int i=1;i<=n;i++) cin>>a[i];


    ll ans=n*(n+1)/2;
    for(ll i=1;i<n;i++)
    {
        ans+=(a[i]!=a[i+1])*i*(n-i);
    }


    //cout<<ans<<'\n';
    while(q--)
    {
        ll x,v;
        cin>>x>>v;

        if(x>1) ans-=(a[x]!=a[x-1])*(x-1)*(n-x+1);
        if(x<n) ans-=(a[x]!=a[x+1])*(x)*(n-x);

        a[x]=v;

        if(x>1) ans+=(a[x]!=a[x-1])*(x-1)*(n-x+1);
        if(x<n) ans+=(a[x]!=a[x+1])*(x)*(n-x);

        cout<<ans<<'\n';
    }
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}


posted @   纯粹的  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示