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;
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm开启自动补全_python代码补全插件

    pycharm开启自动补全_python代码补全插件在使用python时候我们可能更倾向于能够使用到自动补全代码的功能在一段时间的找寻和使用过程中,发现了几种能补全代码的插件和方法吧pycharm中TabNine插件 这个我感觉还能用吧~啧百度kite官网下载kite插件百度aiXcoder插件下载aiXcoder插件GitHub开源项目1.首先第一个TabNine的插件 亲测了一段时间,感觉很一般 如果想体验一下也不是不行 安装插件过程如下: pycharm编译器->File->Settings

  • java输出值取后两位小数,Java输出结果保留两位小数

    java输出值取后两位小数,Java输出结果保留两位小数今天在做PAT007-六度空间,输出结果需要保留两位小数,所以在网上找了相关资料。一共有四种方法,代码如下:importjava.math.BigDecimal;importjava.text.DecimalFormat;importjava.text.NumberFormat;publicclassDecimals{doublef=111231.5585;publicvoi…

  • GoLand 2021.2.3 激活码(在线激活)

    GoLand 2021.2.3 激活码(在线激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • css中padding中样式的顺序含义

    css中padding中样式的顺序含义

  • 程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器

    程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器前言(欢迎评论区列出你认为牛逼的开发神器~)本文来自MeloDev的投稿,他的博客地址:http://www.jianshu.com/u/f5909165c1e8程序员必备简捷开发辅助工具总结写在前面:工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马…

    2022年10月19日
  • datax(26):各个数据库与datax字段映射

    datax(26):各个数据库与datax字段映射通过源码解读Column-datax中的数据类型,可以知道datax框架中只有7(enumType种)种数据类型,那么各个数据库的字段是如何和datax的字段进行相互映射?一、ADBPGDataX内部类型ADBPG数据类型Longbigint,bigserial,integer,smallint,serialDoubledoubleprecision,float,numeric,realStringvarchar,char,tex.

发表回复

您的电子邮箱地址不会被公开。

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