牛客ds题1002践踏

分析每个操作

操作一,加入一条线段[l,r],感觉可以直接懒标记,[l,r] tag+=1,也可以差分操作

操作二,删除一条线段[l,r],[l,r]tag-=1

操作三,x+kt=y,问y可以在几条线段内,t取整数,一开始想暴力,r<1e9,x=1,k=1e5,t最少也要循环到1e4,一次操作三就循环1e4,很明显不能暴力,分析x+kt=y这式子,先从简单的开始,k=0,那只需要查x的位置即可,如果k!=0,有什么办法只查一个位置呢,分析有贡献的线段可以把它们平移到[0,k-1]区间内,查x%k位置存在贡献,那就好办了

k=0,直接操作,查x的位置,n=1e5,离散化处理即可

k!=0,把线段平移到[0,k-1]即可,查x%k位置,线段树处理,线段平移到[1,k]区间内

线段平移处理(懒标记) M=1e5

1.r-l+1>=k 相当于[1,k]区间都被覆盖了 modify(1,1,M,1,k,1)

2.l>r  modify(1,1,M,1,r,1) modify(1,1,M,l,k,1)

3.r>l modify(1,1,M,l,r,1)

懒标记处理

// Problem: 践踏
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/26896/1002
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=1e5+9;
const int M=1e5;
int a[N];
struct node{ll val,tag;
}seg[N<<2];
struct Q{int op,l,r,x;
}que[N];
vector<int> X;
ll binary(int x){return lower_bound(X.begin(),X.end(),x)-X.begin()+1;}
ll tl(ll x){return x<<1;}
ll tr(ll x){return x<<1|1;}
bool inrange(int L,int R,int l,int r){return L>=l && R<=r;
}
bool outofrange(int L,int R,int l,int r){return L>r || l>R;
}
void pushup(int id){seg[id].val=seg[tl(id)].val+seg[tr(id)].val;
}
void maketag(int id,int l,int r,int v){seg[id].tag+=v;seg[id].val+=(r-l+1)*v;
}
void pushdown(int id,int l,int r){int mid=(l+r)>>1;maketag(tl(id),l,mid,seg[id].tag);maketag(tr(id),mid+1,r,seg[id].tag);seg[id].tag=0;
}
void modify(int id,int L,int R,int l,int r,int v){if(inrange(L,R,l,r)){maketag(id,L,R,v);}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;pushdown(id,L,R);modify(tl(id),L,mid,l,r,v);modify(tr(id),mid+1,R,l,r,v);pushup(id);}
}ll query(int id,int l,int r,int pos){if(l==r){return seg[id].val;}int mid=(l+r)>>1;pushdown(id,l,r);if(mid>=pos){return query(tl(id),l,mid,pos);}else{return query(tr(id),mid+1,r,pos);}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n,k;cin>>n>>k;if(!n){cout<<"fafa"<<'\n';return 0;}for(int i=1;i<=n;i++){cin>>que[i].op;if(que[i].op==1){cin>>que[i].l>>que[i].r;X.push_back(que[i].l);X.push_back(que[i].r);}else if(que[i].op==2){cin>>que[i].l>>que[i].r;X.push_back(que[i].r);X.push_back(que[i].l);}else{cin>>que[i].x;		X.push_back(que[i].x);}}sort(X.begin(),X.end());X.erase(unique(X.begin(),X.end()),X.end());if(!k){for(int i=1;i<=n;i++){if(que[i].op==1){int l,r;l=binary(que[i].l);r=binary(que[i].r);modify(1,1,M,l,r,1);}else if(que[i].op==2){int l,r;l=binary(que[i].l);r=binary(que[i].r);modify(1,1,M,l,r,-1);}else{int x;x=binary(que[i].x);cout<<query(1,1,M,x)<<'\n';}}}else{for(int i=1;i<=n;i++){if(que[i].op==1){if(que[i].r-que[i].l+1>=k){modify(1,1,M,1,k,1);continue;}int l=que[i].l%k;l++;int r=que[i].r%k;r++;if(l>r){modify(1,1,M,1,r,1);					modify(1,1,M,l,k,1);					}else{modify(1,1,M,l,r,1);}}else if(que[i].op==2){if(que[i].r-que[i].l+1>=k){modify(1,1,M,1,k,-1);continue;}int l=que[i].l%k;l++;int r=que[i].r%k;r++;if(l>r){modify(1,1,M,1,r,-1);					modify(1,1,M,l,k,-1);					}else{modify(1,1,M,l,r,-1);				}}else{int x=que[i].x%k;x++;cout<<query(1,1,M,x)<<'\n';}}}return 0;
}

差分处理

// Problem: 践踏
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/26896/1002
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=1e5+9;
const int M=1e5;
int a[N];
struct node{ll val,tag;
}seg[N<<2];
struct Q{int op,l,r,x;
}que[N];
vector<int> X;
ll binary(int x){return lower_bound(X.begin(),X.end(),x)-X.begin()+1;}
ll tl(ll x){return x<<1;}
ll tr(ll x){return x<<1|1;}
bool inrange(int L,int R,int l,int r){return L>=l && R<=r;
}
bool outofrange(int L,int R,int l,int r){return L>r || l>R;
}
void pushup(int id){seg[id].val=seg[tl(id)].val+seg[tr(id)].val;
}
ll query(int id,int l,int r,int pos){if(l==r){return seg[id].val;}int mid=(l+r)>>1;if(mid>=pos){return query(tl(id),l,mid,pos);}else{return query(tr(id),mid+1,r,pos);}
}
ll ask(int id,int L,int R,int l,int r){if(inrange(L,R,l,r)){return seg[id].val;}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;return ask(tl(id),L,mid,l,r)+ask(tr(id),mid+1,R,l,r);}else{return 0;}
}
void update(int id,int l,int r,int pos,int v){if(l==r){seg[id].val+=v;return;}int mid=(l+r)>>1;if(mid>=pos){update(tl(id),l,mid,pos,v);}else{update(tr(id),mid+1,r,pos,v);}pushup(id);
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n,k;cin>>n>>k;if(!n){cout<<"fafa"<<'\n';return 0;}for(int i=1;i<=n;i++){cin>>que[i].op;if(que[i].op==1){cin>>que[i].l>>que[i].r;X.push_back(que[i].l);X.push_back(que[i].r);}else if(que[i].op==2){cin>>que[i].l>>que[i].r;X.push_back(que[i].r);X.push_back(que[i].l);}else{cin>>que[i].x;		X.push_back(que[i].x);}}sort(X.begin(),X.end());X.erase(unique(X.begin(),X.end()),X.end());if(!k){for(int i=1;i<=n;i++){if(que[i].op==1){int l,r;l=binary(que[i].l);r=binary(que[i].r);update(1,1,M,l,1);update(1,1,M,r+1,-1);}else if(que[i].op==2){int l,r;l=binary(que[i].l);r=binary(que[i].r);update(1,1,M,l,-1);update(1,1,M,r+1,1);}else{int x; x=binary(que[i].x);cout<<ask(1,1,M,1,x)<<'\n';}}}else{for(int i=1;i<=n;i++){if(que[i].op==1){if(que[i].r-que[i].l+1>=k){update(1,1,M,1,1);update(1,1,M,k+1,-1);continue;}int l=que[i].l%k;l++;int r=que[i].r%k;r++;if(l>r){update(1,1,M,1,1);				update(1,1,M,r+1,-1);	update(1,1,M,l,1);				update(1,1,M,k+1,-1);				}else{update(1,1,M,l,1);update(1,1,M,r+1,-1);}}else if(que[i].op==2){if(que[i].r-que[i].l+1>=k){update(1,1,M,1,-1);update(1,1,M,k+1,1);continue;}int l=que[i].l%k;l++;int r=que[i].r%k;r++;if(l>r){update(1,1,M,1,-1);				update(1,1,M,r+1,1);	update(1,1,M,l,-1);				update(1,1,M,k+1,1);				}else{update(1,1,M,l,-1);update(1,1,M,r+1,1);}}else{int x=que[i].x%k;x++;cout<<ask(1,1,M,1,x)<<'\n';}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/22356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器运行nslookup提示bash: nslookup: command not found【笔记】

在容器中提示bash: nslookup: command not found&#xff0c;表示容器中没有安装nslookup命令。 可以通过以下命令安装nslookup&#xff1a; 对于基于Debian/Ubuntu的容器&#xff0c;使用以下命令&#xff1a; apt-get update apt-get install -y dnsutils对于基于CentOS/R…

AI网络爬虫:用GraphQL查询爬取动态网页数据

任务&#xff1a;爬取网站www.skillshare.com搜索结果页面数据&#xff1a; 查看网站的请求信息&#xff1a; 请求网址: https://www.skillshare.com/api/graphql 请求方法: POST 状态代码: 200 OK 远程地址: 127.0.0.1:10809 引荐来源网址政策: strict-origin-when-…

一篇文章讲透数据结构之树and二叉树

一.树 1.1树的定义 树是一种非线性的数据结构&#xff0c;它是有n个有限结点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根在上&#xff0c;叶在下的。 在树中有一个特殊的结点&#xff0c;称为根结点&#xff0c;根结点…

【玩转google云】在 Google Cloud 和 AWS 之间创建高可用性 VPN 连接(一)

目录 一、目标 二、架构:实现高可用性 VPN 连接 1、架构图 2、实现 99.99% 的服务可用性 SLA

免费工具扫描 Linux 中已知威胁

首发公众号网络研究观&#xff0c;关注获取更多。 卡巴斯基为 Linux 平台发布了一款名为 KVRT 的新病毒清除工具&#xff0c;允许用户免费扫描他们的系统并清除恶意软件和其他已知威胁。 尽管人们普遍误以为 Linux 系统本质上是安全的&#xff0c;不会受到威胁&#xff0c;但不…

AIGC工具汇总介绍

AIGC工具汇总介绍 一、引言 随着人工智能技术的飞速发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff09;工具已经成为内容创作领域的重要力量。这些工具利用深度学习、自然语言处理、计算机视觉等AI技术&#xff0c;自动生成各种形式的数字内容&#xff0c;如…

如何使用Vuforia AR进行增强现实技术的开发?

前言 今天是坚持写博客的第17天&#xff0c;很高兴自己可以一直坚持下来。我们今天来讲讲怎么使用Vuforia AR进行增强现实的开发。 我们需要在今天的开发中用到Vuforia AR和2018版的Unity3d 什么是Vuforia AR Vuforia AR是基于实时计算摄影机影像的位置及角度&#xff0c;并…

掘金小册《前端性能优化原理与实践》读书笔记

前端性能优化&#xff1a; 以下文章内容是根据掘金小册《前端性能优化原理与实践》整理的 网络层面的优化 1、减少请求次数&#xff1b;2、减少单次请求花费的时间&#xff1b; webpack相关优化&#xff1b; 1、按需加载关键&#xff1a;require.ensure(dependencies, cal…

Kubernetes ingress

目录 一.ingress 1.ingress简介 2.实现外部应用能访问内部集群服务的方法 &#xff08;1&#xff09;NodePort&#xff1a; &#xff08;2&#xff09;LoadBalancer&#xff1a; &#xff08;3&#xff09;externalIPs&#xff1a; &#xff08;4&#xff09;ingress&am…

vue computed 计算属性

一、计算属性(computed) 1、说明 当一些数据需要根据其它数据变化时,需要进行处理才能去展示,虽然vue提供了绑定数据表达式绑定的方式,但是设计它的初衷只是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护,对于一些比较复杂和特殊的计算有可能就捉襟见肘了,而…

【会议征稿,ACM独立出版】第三届机器人、人工智能与信息工程国际学术会议(RAIIE 2024,7月05-07)

2024年第二届机器人、人工智能与信息工程国际学术会议&#xff08;RAIIE 2024&#xff09;将于2024年7月5-7日在新加坡举行。本次会议主要围绕“机器人”、“智能仿生”和“信息科学”的最新研究进展展开&#xff0c;会议汇聚了该领域内国际学者、专家、研究人员及相关从业人员…

274 基于matlab的随机粗糙表面对微气体轴承内气体压强分布的影响

基于matlab的随机粗糙表面对微气体轴承内气体压强分布的影响。采用差分法求解气体轴承的雷诺方程&#xff0c;通过尺寸参数、分形维数对粗糙度表面设置&#xff0c;滑流参数设置&#xff0c;实现气压分布可视化结果显示。程序已调通&#xff0c;可直接运行。 274 气体轴承 随机…

hnust 湖南科技大学 2022 软件测试报告+代码

hnust 湖南科技大学 2022 软件测试报告代码 内容 BMI junit单元测试决策表划分方法测试三角形判断问题文档修改问题之因果图实验逻辑覆盖测试技术实验&#xff08;白盒测试&#xff09;selenium 功能自动化测试Jmeter 性能自动化测试 下载地址 https://pan.baidu.com/s/19e…

基于websocket与node搭建简易聊天室

一、前言 上一篇文章介绍了websocket的详细用法与工具类的封装&#xff0c;本篇就基于websocket搭建一个简易实时的聊天室。 在本篇开始之前也可以去回顾一下websocket详细用法&#xff1a;WebSocket详解与封装工具类 二、基于node搭建后台websocket服务 首先确认本机电脑中…

c# 操作Microsoft Access数据库

数据库结构为&#xff1a; public static string connting "数据库路径&#xff1a;如&#xff1a;D:\\xxx.mdb";//插入public bool InsertToFile(string casenumber, int lastrowid, int pagecount){bool result true;try{string connString $"ProviderMicr…

在nodeJS 中实现langchain 的Agent (实验笔记)

在nodeJS 中实现langchain 的Agent 实验过程记录如下&#xff1a; 1 构建一个Agent &#xff0c;使用两个工具 Calculator和TavilySearchResults 2 Tavily Search的API key 的获取 之前一直找不到一个合适的搜索引擎&#xff0c;Google Search 被墙&#xff0c;bing Search …

【Linux】进程(5):命令行参数

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux进程&#xff08;5&#xff09;&#xff1a;命令行参数&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 &#xff08;A&#xff09;为什么要有命令…

iOS中的@objc和@objcMembers实现Swift和OC的交互

目录 ​​​​​​​前言 一、使用OC和Swift混编的场景 二、objcMembers 1.objcMembers 的用法和示例 1.基本用法 2.与objc 的区别 3.使用场景 1. 与Objective-C代码互操作 2.需要使用Objective-C运行时特性 3.避免重复的objc修饰符 4.注意事项 前言 这篇博客主要讨…

Paraformer解读(1)基于self-attention和dfsmn的encoder

DFSMN SAN-M python实现 import torch import torch.nn as nn import torch.nn.functional as Fclass PositionalEncoding(nn.Module):def __init__(self, d_model, dropout0.1, max_len5000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(pdropout)p…

C语言中整形提升举例说明

一. 简介 前面一篇文章简单学习了 C语言中的整形提升。文章如下&#xff1a; C语言中的整型提升-CSDN博客 本文再举例说明 C语言随处可见的整型提升的代码示例。 二. C语言中整形提升举例说明 1. 什么是整形提升&#xff1f; C语言的表达式中的 字符型&#xff08;即 c…