首页 > 其他分享 >s2oj1651 【2022.10.15】灯 (light)

s2oj1651 【2022.10.15】灯 (light)

时间:2023-03-20 21:58:03浏览次数:59  
标签:... ch 15 read light void args put 2022.10

s2oj1651 【2022.10.15】灯 (light)

link

首先通过经典的点减边容斥将极长连续段转化为求点亮的灯的个数减去相邻两个灯均点亮的对数。

点亮的灯的个数是简单的。接下来考虑如何计算相邻两个均被点亮的灯的对数。

考虑根号分治。

  1. 首先有一个显然的暴力是直接枚举所有颜色为 \(x\) 的点的两边,然后检查其是否被点亮。这个暴力能够处理相同颜色点数较少的情况。

  2. 对于点数较多的情况,这样的点一定不会很多。那么我们在更新周围小点的时候可以顺便维护一下如果翻转大点会造成怎样的贡献。

具体地,翻转一个颜色 \(x\) 时,若 \(x\) 的个数较少则暴力计算与其相邻的点是否被点亮,同时对其周围的大点打上贡献的标记。若 \(x\) 的个数较多则答案即为标记,然后更新其周围的大点的贡献即可。

时间复杂度 \(\mathcal{O}(n \sqrt n)\)。

code
#include<bits/stdc++.h>
using namespace std;
namespace IO{
    template<typename T>inline bool read(T &x){
        x=0;
        char ch=getchar();
        bool flag=0,ret=0;
        while(ch<'0'||ch>'9') flag=flag||(ch=='-'),ch=getchar();
        while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(),ret=1;
        x=flag?-x:x;
        return ret;
    }
    template<typename T,typename ...Args>inline bool read(T& a,Args& ...args){
        return read(a)&&read(args...);
    }
    template<typename T>void prt(T x){
        if(x>9) prt(x/10);
        putchar(x%10+'0');
    }
    template<typename T>inline void put(T x){
        if(x<0) putchar('-'),x=-x;
        prt(x);
    }
    template<typename T>inline void put(char ch,T x){
        if(x<0) putchar('-'),x=-x;
        prt(x);
        putchar(ch);
    }
    template<typename T,typename ...Args>inline void put(T a,Args ...args){
        put(a);
        put(args...);
    }
    template<typename T,typename ...Args>inline void put(const char ch,T a,Args ...args){
        put(ch,a);
        put(ch,args...);
    }
    inline void put(string s){
        for(int i=0,sz=s.length();i<sz;i++) putchar(s[i]);
    }
    inline void put(const char* s){
        for(int i=0,sz=strlen(s);i<sz;i++) putchar(s[i]);
    }
}
using namespace IO;
#define N 200005
#define M 505 
int n,q,m,w[N],len,ans1,ans2,vis[N];
vector<int> g[N],ins;
int val[M][M],tag[M],id[N],num,dis[N];
int main(){
    read(n,q,m),len=sqrt(n)+1;
    for(int i=1;i<=n;i++) read(w[i]),g[w[i]].emplace_back(i);
    for(int i=1;i<=m;i++) 
        if(g[i].size()>len) ins.emplace_back(i),id[i]=++num;
    for(int i=1;i<=n;i++){
        if(id[w[i]]&&id[w[i+1]]&&w[i]!=w[i+1]) val[id[w[i]]][id[w[i+1]]]++;
        if(id[w[i]]&&id[w[i-1]]&&w[i]!=w[i-1]) val[id[w[i]]][id[w[i-1]]]++;
        if(w[i]==w[i-1]) dis[w[i]]++;
    }
    for(int qq=1,x;qq<=q;qq++){
        read(x),vis[x]^=1;
        int t=vis[x]?1:-1;
        ans1+=t*g[x].size(),ans2+=t*dis[x];
        if(g[x].size()<=len){
            for(auto v:g[x]){
                if(vis[w[v+1]]&&x!=w[v+1]) ans2+=t;
                if(vis[w[v-1]]&&x!=w[v-1]) ans2+=t;
                if(id[w[v+1]]&&x!=w[v+1]) tag[id[w[v+1]]]+=vis[w[v+1]]!=vis[x]?1:-1;
                if(id[w[v-1]]&&x!=w[v-1]) tag[id[w[v-1]]]+=vis[w[v-1]]!=vis[x]?1:-1;
            } 
        }else{
            ans2+=tag[id[x]],tag[id[x]]=-tag[id[x]];
            for(auto v:ins)
                if(x!=v&&vis[v]) ans2+=t*val[id[v]][id[x]];
        }
        put('\n',ans1-ans2);
    }
    return 0;
}

标签:...,ch,15,read,light,void,args,put,2022.10
From: https://www.cnblogs.com/fzj2007/p/17238008.html

相关文章

  • leetcode 1592
    注意整行输入的格式#include<iostream>#include<sstream>usingnamespacestd;stringreorderSpaces(stringtext){stringwords[55];intn=text.size()......
  • P2515 [HAOI2010]软件安装
    题目就是树上背包,但要先缩点为DAG #include<iostream>#include<cstring>#include<vector>#include<stack>usingnamespacestd;constintN=503,M=1003;......
  • X60(L415)钢板简介、X60执行标准、X60期货订轧
    一、X60(L415)管线钢简介:L415就是X60,X60属于管线钢,钢的牌号表示方法:L:代表输送管线Line的首位英文字母,415:代表钢板规定的屈服强度值,X:代表管线钢,60:代表钢板规定的屈服强度值,单......
  • Lightroom Classic 2022 for Mac(Lrc2022) 11.5中文激活版
    Lightroom Classic2022是一款桌面照片编辑和管理软件,照片后期处理软件,数码摄影师必备工具,主要面向数码摄影师、图形设计等专业人士和高端用户,以及所有喜好拍照、需要拍照......
  • Windows 漏洞修改 CVE-2016-2183 CVE-2013-2566 CVE-2015-2808
    使用软件:https://www.nartac.com/Products/IISCrypto/Download参考链接:https://segmentfault.com/a/1190000042222840?utm_source=sf-similar-article......
  • [pat乙]1015 德才论
    1015德才论(25分)宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不......
  • 15CrMo钢板简介、15CrMo期货订轧、15CrMo执行标准
    一、15CrMo钢板简介:15CrMo钢板定为于合金结构钢板,15CrMo钢板生产执行标准为;WYJ舞阳专用技术条件。由于钢中含有较高含量的Cr、C和其它合金元素,钢材的淬硬倾向较明显,焊接性......
  • 15
    建立一套以数据采集为基础,数据分析、统计、管控为核心的综合性能源管理系统,详细需求描述如下:1、数据收集功能:生产区域以车间为主体,通过计量仪表远程收集蒸汽、冷凝水、电、......
  • 【洛谷】P2150 [NOI2015] 寿司晚宴(状压dp+根号分治)
    原题链接题意有序列\(2,3,4\cdotsn\),对于序列中的每一个数,它可以被放入两个集合中的任意一个,或者不选。最后需要满足两个集合间的数两两互质(集合内部的数不需要满足互......
  • 网络系统管理Linux环境——15.StorageSrv之NFS
    题目要求服务器AppSrv上的工作任务2. NFS共享/webdata/目录;用于存储AppSrv主机的WEB数据;仅允许AppSrv主机访问该共享。项目实施关闭selinux跟防火墙:[root@storagesrv~]#......