ODT模板_od模型

ODT模板_od模型待

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

需要满足题目是随机数据,否则会被卡


P2572 [SCOI2010]序列操作

题意:

使用数据结构完成下列操作:
1.区间赋值为0
2.区间赋值为1
3.区间求和
4.区间取反
5.区间最大连续1数量

code:

因为不是随机数据,所以ODT会超时,只是记录一下模板。

#include<bits/stdc++.h>
using namespace std;
const int maxm=1e5+5;
#define type bool
#define It set<Node>::iterator
struct Node{ 
   
    int l,r;
    mutable type x;
    Node(int a,int b=0,type c=0){ 
   
        l=a,r=b,x=c;
    }
    bool operator<(const Node& a)const { 
   
        return l<a.l;
    }
};
set<Node>s;
int n,m;
It split(int pos){ 
   
    auto it=s.lower_bound(Node(pos));//不能用upper_bound,因为要找最左边的一个
    if(it!=s.end()&&it->l==pos){ 
   
        return it;
    }
    it--;
    int l=it->l,r=it->r;
    type x=it->x;
    s.erase(it);
    s.insert(Node(l,pos-1,x));
    return s.insert(Node(pos,r,x)).first;
}
void assign(int l,int r,type val){ 
   //区间赋值
    auto it2=split(r+1),it1=split(l);//要先找r,再找l
    s.erase(it1,it2);
    s.insert(Node(l,r,val));
}
void rev(int l,int r){ 
   //区间取反
    It it2=split(r+1),it1=split(l);
    for(;it1!=it2;it1++){ 
   
        it1->x^=1;
    }
}
int sum(int l,int r){ 
   //区间求和
    int ans=0;
    It it2=split(r+1),it1=split(l);
    for(;it1!=it2;it1++){ 
   
        if(it1->x){ 
   
            ans+=it1->r-it1->l+1;
        }
    }
    return ans;
}
int cal(int l,int r){ 
   //区间最大连续1数量
    int ans=0;
    int len=0;
    It it2=split(r+1),it1=split(l);
    for(;it1!=it2;it1++){ 
   
        if(it1->x){ 
   
            len+=it1->r-it1->l+1;
        }else{ 
   
            ans=max(ans,len);
            len=0;
        }
    }
    if(len){ 
   
        ans=max(ans,len);
    }
    return ans;
}
signed main(){ 
   
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){ 
   
        int x;scanf("%d",&x);
        s.insert(Node(i,i,x));
    }
    s.insert(Node(n,n,0));
    while(m--){ 
   
        int op,l,r;scanf("%d%d%d",&op,&l,&r);
        if(op==0){ 
   //[l,r]修改为0
            assign(l,r,0);
        }else if(op==1){ 
   //[l,r]修改为1
            assign(l,r,1);
        }else if(op==2){ 
   //[l,r]取反
            rev(l,r);
        }else if(op==3){ 
   //[l,r]的和
            int ans=sum(l,r);
            printf("%d\n",ans);
        }else if(op==4){ 
   //[l,r]最大连续1数量
            int ans=cal(l,r);
            printf("%d\n",ans);
        }
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电容分类和作用_电容的识别

    电容分类和作用_电容的识别硬件基础知识—电容分类智能硬件和物联网产品上,工作电压不高,其常用的电容根据不同的工艺,主要分为陶瓷电容、电解电容和钽电容。↑陶瓷电容的结构图↑电解电容的结构图不管是什么电容,都是两组金属片夹着一层介质。陶瓷电容把金属片交错摆放,电解电容把金属片卷成柱状。↑片状陶瓷电容↑贴片陶瓷电容陶瓷电容,MultilayerCeramicCapacitor(MLCC),陶瓷电容的电介质是陶瓷,所以叫做陶瓷电容。陶瓷电容容值小、电压高、尺寸小、高频性能好、不区分正.

    2022年8月22日
    7
  • 记录一次XordDos(BillGates)木马导致Centos kworker线程占满CPU资源的解决过程「建议收藏」

    记录一次XordDos(BillGates)木马导致Centos kworker线程占满CPU资源的解决过程「建议收藏」1.问题现象​ 通过top命令查看资源占用发现有大量kworker线程占用CPU资源,如下图。怀疑是系统问题或平台程序导致的问题。2.是否是程序导致的论证过程​ 因平台有两部分组成socket+web端,考虑可能是两者中的一个导致的,因此采用以下三种方式验证:​ [1]只关掉socekt端,问题依旧出现​ [2]只关掉web端,问题依旧出现​ [3]全部关掉,问题依旧出现​ …

    2022年9月15日
    4
  • 机器学习中的F1-score

    机器学习中的F1-score一、什么是F1-scoreF1分数(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,最小为0。此外还有F2分数和F0.5分数。F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半。计算公式为:G…

    2022年10月15日
    2
  • 前端进阶(1)Web前端性能优化

    前端进阶(1)Web前端性能优化前端进阶(1)Web前端性能优化Web前端性能优化,不仅能够改善站点的用户体验,并且能够节省相当的资源利用。下面将从1)服务器、2)html内容、3)css、4)javascript、5)图片等几方面介绍具体的优化操作。目录:1.服务器优化1.1.使用内容分发网络(CDN)1.2.服务器使用http2.0协议1.3.GZIP压缩1.4.使用浏览器缓存1.5…

    2022年6月22日
    27
  • 网页游戏制作_怎么制作app软件

    网页游戏制作_怎么制作app软件对于网页游戏是怎样制作的,你最起码要先学会html超文本标记语言再谈其他的工具方面我喜欢dreamweaver8.0图像及动画方面我喜欢photoshopcs3flash8.0用这三

    2022年8月3日
    9
  • sql语句中declare_sql的declare语句

    sql语句中declare_sql的declare语句一.WITHAS的含义   WITHAS短语,也叫做子查询部分(subqueryfactoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNIONALL的不同部分,作为提供数据的部分。 特别对于UNIONALL比较有用。因为UNIONALL的每个部分可能相同,但是如果每个部分…

    2022年8月20日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号