当前位置: 首页 > news >正文

梦熊 CSP-S模拟赛 T3 youyou 的序列 II

原题链接


 

题目大意

给定一个长度为 n 的非负整数序列 a ,初始时所有数字均被标记为蓝色,youyou yy 轮流对序列 a 进行操作,由 youyou 开始。
如果当前是 youyou 的回合,那么他可以至多选择连续的 c 1 个数,如果他们的和小于等于 w 1 ,则标记为红色。
如果当前是 yy 的回合,那么他可以至多选择连续的 c 2 个数,如果他们的和大于 w 2 ,则标记为蓝色。
定义 youyou 胜利即是在游戏任意时刻,所有数字都被标记为红色,定义 yy 胜利则是在无穷多个回合内, youyou 无法胜利。现在给定 q 个操作,对于每个操作给定三个数 opt , x , y
如果 opt 1 ,表示将 a x 增加 y
如果 opt 2 ,表示在序列 [ x , y ] 上进行一轮游戏。
对于每一个操作 2 ,判断 youyou 能否获得胜利

解题思路

代码如下:

#include <bits/stdc++.h>
#define ll long longusing namespace std;const int maxn = 3e5 + 5;int n, q, c1, c2;
ll w1, w2;
ll a[maxn], tr[maxn];void upd(int id, ll k){for(int i = id; i <= n; i += i & -i) tr[i] += k; 
}
ll que(int id){ll s = 0;for(int i = id; i > 0; i -= i & -i) s += tr[i];return s;
}
namespace seg{
#define l(x) (x << 1)
#define r(x) (x << 1 | 1)
ll max1[maxn << 2], tag[maxn << 2];
void up(int x){max1[x] = max(max1[l(x)], max1[r(x)]);
}
void down(int x){max1[l(x)] += tag[x], tag[l(x)] += tag[x];max1[r(x)] += tag[x], tag[r(x)] += tag[x];tag[x] = 0;
}
void update(int x, int l, int r, int ql, int qr, ll k){if(ql <= l && r <= qr){max1[x] += k, tag[x] += k;return;}down(x);int mid = l + r >> 1;if(ql <= mid) update(l(x), l, mid, ql, qr, k);if(qr > mid) update(r(x), mid + 1, r, ql, qr, k);up(x);
}
int query1(int x, int l, int r, int ql, int qr, ll k){if(ql <= l && r <= qr){if(max1[x] <= k) return 0;if(l == r){if(max1[x] > k) return l;else return 0;}down(x);int mid = l + r >> 1;if(max1[l(x)] > k) return query1(l(x), l, mid, ql, qr, k);else return query1(r(x), mid + 1, r, ql, qr, k);}down(x);int mid = l + r >> 1, res = 0;if(ql <= mid) res = query1(l(x), l, mid, ql, qr, k);if(res) return res;if(qr > mid) res = query1(r(x), mid + 1, r, ql, qr, k);return res;
}
int query2(int x, int l, int r, int ql, int qr, ll k){if(ql <= l && r <= qr){if(max1[x] <= k) return 0;if(l == r){if(max1[x] > k) return l;else return 0;}down(x);int mid = l + r >> 1;if(max1[r(x)] > k) return query2(r(x), mid + 1, r, ql, qr, k);else return query2(l(x), l, mid, ql, qr, k);}down(x);int mid = l + r >> 1, res = 0;if(qr > mid) res = query2(r(x), mid + 1, r, ql, qr, k);if(res) return res;if(ql <= mid) res = query2(l(x), l, mid, ql, qr, k);return res;
}}
namespace seg2{
#define l(x) (x << 1)
#define r(x) (x << 1 | 1)
ll max1[maxn << 2];
void up(int x){max1[x] = max(max1[l(x)], max1[r(x)]);
}
void build(int x, int l, int r){if(l == r){max1[x] = a[l];return;}int mid = l + r >> 1;build(l(x), l, mid), build(r(x), mid + 1, r);up(x);
}
void update(int x, int l, int r, int id, ll k){if(l == r){max1[x] += k;return;}int mid = l + r >> 1;if(id <= mid) update(l(x), l, mid, id, k);else update(r(x), mid + 1, r, id, k);up(x);
}
ll query(int x, int l, int r, int ql, int qr){if(ql <= l && r <= qr) return max1[x];int mid = l + r >> 1;ll res = 0;if(ql <= mid) res = max(res, query(l(x), l, mid, ql, qr));if(qr > mid) res = max(res, query(r(x), mid + 1, r, ql, qr));return res;
}}int main(){scanf("%d %d %d %d %lld %lld", &n, &q, &c1, &c2, &w1, &w2);for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);for(int i = 1; i <= n; i ++){upd(i, a[i]);seg::update(1, 1, n, max(1, i - c2 + 1), i, a[i]);}seg2::build(1, 1, n);while(q --){int op;scanf("%d", &op);if(op == 1){int x;ll y;scanf("%d %lld", &x, &y);upd(x, y);seg::update(1, 1, n, max(1, x - c2 + 1), x, y);seg2::update(1, 1, n, x, y);a[x] += y;}else{int l, r;scanf("%d %d", &l, &r);if(seg2::query(1, 1, n, l, r) > w1){printf("tetris\n");continue;}int L = 0, R = 0;if(r - l + 1 <= c2){if(que(r) - que(l - 1) > w2) L = l, R = r;}else{L = seg::query1(1, 1, n, l, r - c2 + 1, w2);R = seg::query2(1, 1, n, l, r - c2 + 1, w2) + c2 - 1;}if(!L || !R){printf("cont\n");continue;}if(que(R) - que(L - 1) <= w1 && R - L + 1 <= c1) printf("cont\n");else printf("tetris\n");}}return 0;
}

线段树+树状数组做法(80pts)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=3e6+5;
int n,q,c1,c2,w1,w2,a[MAXN],t[MAXN];
inline int read()
{int number=0,Fd=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')Fd=-1;ch=getchar();}while(ch>='0'&&ch<='9')number=(number<<1)+(number<<3)+(ch^48),ch=getchar();return number*Fd;
}
inline void write(int number)
{if(number<0)putchar('-'),number=-number;if(number>9)write(number/10);putchar(number%10+'0');
}
struct Tree{int l,r,sum,laz;#define l(x) tree[x].l#define r(x) tree[x].r#define sum(x) tree[x].sum#define laz(x) tree[x].laz
}tree[MAXN<<1];
inline int Build(int p,int l,int r)
{l(p)=l,r(p)=r;if(l==r)return sum(p)=a[l];int mid=l+r>>1;return sum(p)=max(Build(p<<1,l,mid),Build(p<<1|1,mid+1,r));
}
inline int PushUp(int p)
{return sum(p)=max(sum(p<<1),sum(p<<1|1));
}
inline void PushDown(int p)
{if(laz(p)){sum(p<<1)+=laz(p);sum(p<<1|1)+=laz(p);laz(p<<1)+=laz(p);laz(p<<1|1)+=laz(p);laz(p)=0;}
}
inline void Change(int p,int l,int r,int d)
{if(l<=l(p)&&r(p)<=r){sum(p)+=d,laz(p)+=d;return;}//printf("%lld ",p);PushDown(p);int mid=l(p)+r(p)>>1;if(l<=mid)Change(p<<1,l,r,d);if(mid<r)Change(p<<1|1,l,r,d);PushUp(p);
}
inline int Query(int p,int l,int r)
{if(l<=l(p)&&r(p)<=r)return sum(p);PushDown(p);int mid=l(p)+r(p)>>1,res=0;if(l<=mid)res=max(Query(p<<1,l,r),res);if(mid<r)res=max(Query(p<<1|1,l,r),res);return res;
}
inline int low(int x)
{return x&-x;
}
inline void add(int x,int d)
{while(x<=n)t[x]+=d,x+=low(x);
}
inline int query(int x)
{int res=0;while(x)res+=t[x],x-=low(x);return res;
}
main()
{
//	freopen("seq5.in","r",stdin);
//	freopen("seq5.out","w",stdout);n=read(),q=read(),c1=read(),c2=read(),w1=read(),w2=read();for(int i=1;i<=n;i++)a[i]=read(),add(i,a[i]);Build(1,1,n);while(q--){int opt,x,y;opt=read(),x=read(),y=read();if(opt==1)add(x,y),Change(1,x,x,y),a[x]+=y;else{int tmp=Query(1,x,y);if(tmp>w1){puts("tetris");continue;}tmp=query(y)-query(x-1);if(tmp<=w1&&y-x+1<=c1){puts("cont");continue;}else if(tmp>=w2&&y-x+1<=c2){puts("tetris");continue;}else if(tmp<w2){puts("cont");continue;}tmp=query(x-1+c2)-query(x-1);int l=x,r=x-1+c2,TL=0,TR=0;while(r<=y){if(tmp>=w2){TL=l;break;}tmp-=a[l++];tmp+=a[++r];}if(!TL){puts("cont");continue;}tmp=query(y)-query(y-c2);l=y-c2+1,r=y,TR=0;while(l>=x){if(tmp>=w2){TR=r;break;}tmp-=a[r--];tmp+=a[--l];}if(!TR){puts("cont");continue;}tmp=query(TR)-query(TL-1);if(tmp<=w1&&TR-TL+1<=c1)puts("cont");else puts("tetris");}}return 0;
}

相关文章:

梦熊 CSP-S模拟赛 T3 youyou 的序列 II

原题链接 题目大意 给定一个长度为 n 的非负整数序列 a &#xff0c;初始时所有数字均被标记为蓝色&#xff0c;youyou 和 yy 轮流对序列 a 进行操作&#xff0c;由 youyou 开始。 • 如果当前是 youyou 的回合&#xff0c;那么他可以至多选择连续的 c 1 个数…...

记录下docker部署gitlab-ce-17.5版本及客户端git拉取方式配置

服务端部署 # 提前拉取镜像 docker pull gitlab/gitlab-ce:17.5.0-ce.0docker run -d \ --name gitlab \ --hostname gitlab.test.cn \ -p 443:443 \ -p 88:80 \ -p 2222:22 \ --restartalways \ -v /data/gitlab/config:/etc/gitlab \ -v /data/gitlab/logs:/var/log/gitlab …...

opencv-platform实现人脸识别

和同事接触了下甲方,对方算是一个资源整合的自由人&#xff0c;手里有项目&#xff0c;然后认识些开发就聊下有什么事情可以做的&#xff0c;对方聊了下做人脸签到&#xff0c;或者说人脸打开。就这方面我做了下简单的了解。做了个java小demo。 我们常用的人脸识别的摄像头屏幕…...

leetcode 有重复字符串的排列组合

1.题目要求: 2.题目代码&#xff1a; class Solution { public://运用回溯vector<string> result;string s;void backtricking(string S,vector<bool>& used){if(s.size() S.size()){result.push_back(s);return;}for(int i 0;i < S.size();i){if(i >…...

【大数据学习 | kafka】kafka的组件架构

broker:每个kafka的机器节点都会运行一个进程&#xff0c;这个进程叫做broker&#xff0c;负责管理自身的topic和partition&#xff0c;以及数据的存储和处理&#xff0c;因为kafka是集群形式的&#xff0c;所以一个集群中会存在多个broker&#xff0c;但是kafka的整体又不是一…...

Python基于TensorFlow实现简单循环神经网络回归模型(SimpleRNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 Simple RNN是一种基础的循环神经网络&#xff0c;它能够处理序列数据&#xff0c;例如文本、时间序…...

torch.isclose

torch.isclose是 PyTorch 中的一个函数&#xff0c;用于判断两个张量中的对应元素是否接近相等。 其函数签名为&#xff1a;torch.isclose(input, other, rtol1e-05, atol1e-08, equal_nanFalse)。 参数说明&#xff1a; input 和 other&#xff1a;要进行比较的两个张量。r…...

Python记录-字典

定义 Python 中的字典&#xff08;dictionary&#xff09;是一种内置的数据结构&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。字典中的每个键&#xff08;key&#xff09;都是唯一的&#xff0c;并且与一个值&#xff08;value&#xff09;相关联。键…...

python读取学术论文PDF文件内容

目录 1、PyPDF22、pdfplumber3、PyMuPDF4、pdfminer总结 1、PyPDF2 PyPDF2 是一个常用的库&#xff0c;可以用来读取、合并、分割和修改PDF文件。读取pdf内容&#xff1a; import PyPDF2# 打开PDF文件 with open(ELLK-Net_An_Efficient_Lightweight_Large_Kernel_Network_for…...

5550 取数(max)

经验值&#xff1a;2000 时间限制&#xff1a;1000毫秒 内存限制&#xff1a;128MB 庐阳区2020年信息学竞赛试题 不许抄袭&#xff0c;一旦发现&#xff0c;直接清空经验&#xff01; 题目描述 Description 盒子里面有N个球&#xff0c;每个球上都一个数。你每次可以取走一…...

Windows常用网络命令

ipconfig 功能&#xff1a;查看维护本地的IP地址 ipconfig 显示计算机中网络适配器的ip地址、子网掩码及默认网关。 ipconfig /all 显示所有网络适配器&#xff08;网卡、拨号连接等&#xff09;的完整tcp/ip配置信息。与不带参数的用法相比&#xff0c;它的信息更全更多&am…...

地磁传感器(学习笔记上)

在咱们地磁传感器里的开发板&#xff1a; 开发板上的地磁传感器型号是QMC5883L&#xff0c;它也是使用I2C与ESP32通信&#xff0c;I2C地址为0X0D。这个项目&#xff0c;我们使用地磁传感器QMC5883L计算方位角&#xff0c;最终&#xff0c;把开发板放平到桌子上&#xff0c;旋转…...

使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南

使用 NumPy 和 Matplotlib 进行高级数据可视化&#xff1a;实践指南 数据科学和工程实践中&#xff0c;NumPy 和 Matplotlib 是强大的组合工具。本文将进一步展示如何借助这两个库进行更复杂的可视化任务&#xff0c;例如创建多曲线、叠加图、动态可视化等场景。 一、环境准备…...

mysql 启动报错 ‘/var/run/mysqld/mysqld.sock‘

问题描述&#xff1a; Docker 拉取 Ubuntu镜像&#xff0c;启动ubuntu容器后 在里边安装mysql 当容器启动时&#xff0c;不将/var/lib/mysql 目录映射到宿主机时&#xff0c;mysql可以正常启动使用当容器启动时&#xff0c;将/var/lib/mysql 目录映射到宿主机后&#xff0c;my…...

JAVA基础:常用类 (习题笔记)

1&#xff0c;验证键盘输入的用户名不能为空&#xff0c;长度大于6&#xff0c;不能有数字。 提示&#xff1a;使用字符串String类的相关方法完成 package packagingClass;import java.util.Scanner;public class Exercises1 {//程序入口public static void main(String[] arg…...

element 按钮变形 el-button样式异常

什么都没动&#xff0c;element UI的按钮变形了&#xff0c;莫名其妙&#xff0c;连官网的也变形了&#xff0c;换了其它浏览器又正常&#xff0c; 难道这是element UI的问题&#xff1f;NO&#xff0c;是浏览器的插件影响到了&#xff01;去扩展插件里面一个个关闭扩展&#x…...

Windows/Linux(服务器)查看显卡的名称

文章目录 1. 使用 nvidia-smi&#xff08;适用于 NVIDIA 显卡&#xff09;2. 使用 wmic 命令&#xff08;Windows&#xff09; 1. 使用 nvidia-smi&#xff08;适用于 NVIDIA 显卡&#xff09; 如果服务器上安装了 NVIDIA 驱动程序&#xff0c;可以使用 nvidia-smi 工具来查看…...

算法基础 - 时间复杂度和空间复杂度(万字长文详解)

文章目录 前言什么是算法效率时间复杂度定义作用类比理解 空间复杂度定义作用类比理解 大O表示法为什么需要&#xff1f;定义计算步骤1. 计算基本操作的执行次数 T(n)2. 确定 T(n) 的数量级&#xff08;按规则&#xff09;3. 使用大O表示法表示时间复杂度 常见复杂度O(1)说明案…...

【K8S系列】Kubernetes 中 Service IP 地址和端口不匹配问题及解决方案【已解决】

在 Kubernetes 中&#xff0c;Service 是实现 Pod 之间和 Pod 与外部之间通信的关键组件。Service 的 IP 地址和端口配置不当可能导致应用无法正常访问。本文将详细分析 Service IP 地址和端口不匹配的问题&#xff0c;常见原因及其解决方案。 一、问题描述 Service IP 地址和…...

10. 异常处理器

一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…...

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植&#xff0c;肯定少不了在另一台pc或者服务器上进行环境的搭建&#xff0c;那么首先是要知道在已有的工程的代码中用到了哪些包&#xff0c;此时&#xff0c;如果是用人工去一个一个的代码文件中去查看调用了哪些包&#xff0c;这个工作甚是繁琐。…...

istio多主集群架构验证方法

istio单网格多集群架构搭建完成后&#xff0c;需要验证下当前集群是否可以发现对端集群&#xff0c;验证方法如下&#xff1a; 命名空间建议设置为&#xff1a;demo-dubbo deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:finalizers:- kubebuilder.io/net.traf…...

Java全栈经典面试题剖析8】JavaSE高级 -- 线程同步、 线程通信、死锁、线程池

目录 面试题3.44 多线程的同步方式 面试题3.45 多线程安全问题怎么解决 面试题3.46 当一个线程进入一个对象的一个synchronized方法后&#xff0c;其它线程是否可进入此对象的其它方法? 面试题3.47 简述synchronized与java.util.concurrent.locks.Lock的异同&#xff…...

linux 驱动, struct file , struct node, private_data

首先是关于什么是 praviate_data : 来看看正点原子是怎么使用的。 网上找的一些资料&#xff1a; 总结一下&#xff1a; 1 私有数据 是 struct file特有的。 &#xff12;private_data 可以自己随便设置。 3 一般是在 open 函数中设置好&#xff0c;然后在 read, write 函…...

ubuntu 硬盘扩容

在 Linux 中&#xff0c;可以使用以下命令查看磁盘的使用情况和信息&#xff1a; 查看磁盘使用情况&#xff1a; df -h这个命令会显示所有文件系统的使用情况&#xff0c;以人类可读的格式&#xff08;例如 GB 或 MB&#xff09;。 查看磁盘分区和设备信息&#xff1a; lsblk这…...

cm211-1刷机教程镜像包

cm211-1刷机教程 包含镜像包酷看桌面 s905l3-l3b通用 镜像包&#xff1a;https://www.123684.com/s/WGAwjv-5tlv3 1.刷机教程 镜像为线刷镜像包&#xff0c;需要短接刷机 短接刷机&#xff0c;导入镜像包 开始即可。到100%就证明可以了。...

Android 15自定义设置导航栏与状态栏,EdgeToEdge适配

背景&#xff1a;android api 35&#xff0c;activity设置EdgeToEdge.enable((ComponentActivity) this)前提下 一、设置导航栏与状态栏颜色 设置的状态栏颜色&#xff0c;只需要设置fitsSystemWindows跟setOnApplyWindowInsetsListener xml设置&#xff1a; 代码&#xff1a;…...

设计模式概览

设计模式是一种在软件设计中被广泛使用的解决方案&#xff0c;旨在提高软件的可重用性、可维护性和可扩展性。设计模式可以分为三大类&#xff1a;创建型、结构型和行为型。 1、创建型模式 这些模式主要关注对象的创建过程&#xff0c;提供了不同的方式来创建对象&#xff0c…...

力扣每日一题打卡 684. 冗余连接

树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges &#xff0c;edges[i] …...

什么是微服务中的反应性扩展?

大家好&#xff0c;我是锋哥。今天分享关于【什么是微服务中的反应性扩展&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 什么是微服务中的反应性扩展&#xff1f; Reactive Extensions 也称为 Rx。这是一种设计方法&#xff0c;我们通过调用多个服务来收集结果…...

网站建设营销话术/青岛seo代理计费

2019独角兽企业重金招聘Python工程师标准>>> 根据《深入浅出设计模式(C#/Java版)》所述, Strategy模式的应用场景是:1. 多个类的分别只是在于行为不同2. 你需要对行为的算法做很多变动3. 客户不知道算法要使用的数据 Template Method模式的应用场景是:1. 你想将相同…...

怎么做bs网站/怎样做百度推广网页

点击上方“蓝色字”可关注我们&#xff01;暴走时评&#xff1a;日本银行控股和金融服务公司三菱UFJ金融集团&#xff08;MUFG&#xff09;在11月9日的声明中表示&#xff0c;将使用Ripple&#xff08;XRP&#xff09;为巴西创建一项新的跨境支付服务。MUFG将与巴西的Banco Bra…...

wordpress回复批准/合肥百度推广排名优化

阈值 阈值又叫临界值&#xff0c;是指一个效应能够产生的最低值或最高值 对于图像的直方图存在明显边界的图像&#xff0c;我们可以很容易找到这个阈值&#xff0c;但是如果图像直方图分界不明显&#xff0c;那么这个阈值的寻找将变得十分困难。因此我们存在全局阈值与局部阈值…...

深圳国资委/seo流量的提升的软件

这里写目录标题下面是目录可跳转对应页面学习&#xff1b;1.MySQL环境1.1.环境安装1.2.安装位置1.3.修改字符集1.4.配置文件2.MySQL逻辑架构MySQL逻辑架构逻辑架构分层MySQL逻辑架构3.存储引擎下面是目录可跳转对应页面学习&#xff1b; 1. 简介 1.1 安装1.2 MySQL逻辑架构 1.…...

wordpress无法评论/seo网站优化方法

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序运动场地预约系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基PHPMySql的B/S架构&#xff1b;通过后台添加开放的场地类型&#xff08;比如羽毛球、篮球、网球等&#xff09;、…...

大气企业响应式网站/河北网站seo地址

Vue 中$root 的用法: $root用法:作用: 访问跟组件的属性和方法: $root 只是对跟组件有用, 不是父组件, $root 只是对对跟组件有用。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&…...