技术标签: ===模版=== ===数据结构=== 整体二分
#include<cstdio>
#include<iostream>
#define maxn 50005
#define LL long long
using namespace std;
int n,m;
struct Que{
int op,l,r,x,id;
void read()
{
scanf("%d%d%d%d",&op,&l,&r,&x);
if(op==1) x+=n+1;
}
}q[50005];
Que q1[maxn],q2[maxn];
int ans[maxn];
struct XDS
{
struct xds
{
int l,r,add;
LL sum;
bool clear;
}tree[maxn<<3];
void build(int x,int l,int r)
{
tree[x].l=l;
tree[x].r=r;
if(l==r) return ;
int mid=(l+r)>>1;
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
}
void init()
{
tree[1].sum=tree[1].add=0;
tree[1].clear=1;
}
int L,R;
int sz(int x)
{
return tree[x].r-tree[x].l+1;}
void update(int x)
{tree[x].sum=tree[x<<1].sum+tree[x<<1|1].sum;}
void spread(int x)
{
if(tree[x].clear)
{
// cout<<x<<endl;
tree[x<<1].sum=tree[x<<1|1].sum=0;
tree[x<<1].add=tree[x<<1|1].add=0;
tree[x<<1].clear=tree[x<<1|1].clear=1;
tree[x].clear=0;
}
if(tree[x].add)
{
tree[x<<1].add+=tree[x].add;
tree[x<<1|1].add+=tree[x].add;
tree[x<<1].sum+=(LL)tree[x].add*sz(x<<1);
tree[x<<1|1].sum+=(LL)tree[x].add*sz(x<<1|1);
tree[x].add=0;
}
}
void Add(int x)
{
if(tree[x].l>=L&&tree[x].r<=R)
{
tree[x].sum+=(LL)sz(x);
tree[x].add++;
return ;
}
spread(x);
int mid=(tree[x].l+tree[x].r)>>1;
if(mid>=L) Add(x<<1);
if(mid<R) Add(x<<1|1);
update(x);
}
LL ask(int x)
{
spread(x);
if(tree[x].l>=L&&tree[x].r<=R)
return tree[x].sum;
int mid=(tree[x].l+tree[x].r)>>1;
LL ans=0;
if(mid>=L) ans+=ask(x<<1);
if(mid<R) ans+=ask(x<<1|1);
return ans;
}
}TR;
void solve(int H,int T,int l,int r)
{
if(H>T) return ;
if(l==r)
{
for(int i=H;i<=T;i++)
if(q[i].op==2)
ans[q[i].id]=l;
return ;
}
TR.init();
int H1=0,H2=0;
int mid=(l+r)>>1;
for(int i=H;i<=T;i++)
{
TR.L=q[i].l;
TR.R=q[i].r;
if(q[i].op==1)
{
if(q[i].x>mid)
{
TR.Add(1);
q2[++H2]=q[i];
}
else q1[++H1]=q[i];
}
else
{
LL tmp=TR.ask(1);
if(tmp<(LL)q[i].x)
{
q[i].x-=tmp;
q1[++H1]=q[i];
}
else q2[++H2]=q[i];
}
}
for(int i=1;i<=H1;i++) q[H+i-1]=q1[i];
for(int i=1;i<=H2;i++) q[H+H1+i-1]=q2[i];
solve(H,H+H1-1,l,mid);
solve(H+H1,T,mid+1,r);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
q[i].read(),q[i].id=i;
TR.build(1,1,n);
solve(1,m,1,2*n+1);
for(int i=1;i<=m;i++)
if(ans[i]) printf("%d\n",ans[i]-n-1);
return 0;
}
文章浏览阅读9.7k次,点赞14次,收藏28次。在有些情况下,我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件都没有明显的变更来源。这也是为什么我们推荐以 update:myPropName 的模式触发事件取而代之举个例子,在一个包含 title prop 的假设的组件中,我们可以用以下方法表达对其赋新值的意图:this.$emit(‘update:title’, newTitle) 然后父组件可以监听那个事件并根据需要更新一个本地的数据 property。_vue3子组件修改父组件值
文章浏览阅读3.3k次,点赞44次,收藏50次。首先我们要知道vim是什么?vi是由美国程序员比尔·乌尔曼(Bill Joy)于1976年开发的,最初是为了在Unix系统上进行文本编辑而创建的。它是一款基于模式编辑的文本编辑器,以其高效的键盘快捷键而闻名,可在终端环境下使用。vi 成为Unix系统中的标准文本编辑器,并且在大多数Unix和Linux系统上内置。_linux vim
文章浏览阅读9.6k次,点赞40次,收藏215次。一、环境介绍MCU: STM32F103ZET6代码开发工具: Keil5TCP/IP协议栈: LWIP网卡: DM9000本篇文章主要讲解如何在STM32F103工程里添加移植LWIP协议,最终完成TCP服务器、TCP客户端的通信测试。 网卡采用的是DM9000,工程代码中,采用STM32的FSMC接口来驱动DM900网卡,DM9000是并口网卡,引脚多,但是速度快,也可以采用其他网卡,SPI协议的、UART协议的等。 比如:W5500。 因为主要是讲LWIP协议栈的移植,所以网卡相关_网卡芯片和stm32
文章浏览阅读975次,点赞5次,收藏11次。仓库地址:仓库拉取:不想拉取可以直接下载压缩包。_opencv github
文章浏览阅读2.3k次。8种免费商用中文字体 转自https://www.uisdc.com/200-models-free-commercial-fonts 提取连接:https://pan.baidu.com/s/1nLxPRDDS1BTzBtISUfzaAA 提取码: tnxd 一、思源字体系列 大名鼎鼎的思源字体由 Adobe 在线字体库 Typekityu 与谷歌一起合作开发,字库对中(简体/繁体)、日、韩三国汉字进行了全面优化支持,可以说是非常全面了,其实思源不仅是个免费字体,还是一个开源字体,任何用户都可以_类似阿里汉仪智能黑体
文章浏览阅读1.9k次。有时候新导入一个项目,发现有这样一个问题 Error:Failed to open zip file. Gradle’s dependency cache may be > corrupt (this sometimes occurs after a network connection timeout.) href=”syncProject”>Re-download dependencies_androidstudio error: failed to open zip file. gradle's dependency cache may
文章浏览阅读354次。_vue关闭dialog窗口
文章浏览阅读1.2w次,点赞9次,收藏32次。先上代码吧,之后再进行补充和代码优化。activity_main.xml的代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:ori..._android开发分辨率低的图片放大
文章浏览阅读485次。分两种情况: 先看这篇转过来的文章,俺老孙懒得写了。 Linux软件安装通用思路 在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种: 1)一种是软件的源代码,您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。 2)另一种是软件的可执行程序,你只要安装它就可以了。这种软件安装包通常被是一个RPM包(Redhat_什么命令可以查询gcc这个软件包下所含的文件
文章浏览阅读7.1k次,点赞138次,收藏272次。vue知识点在html中vue如何使用在script的src属性中引入vue.js文件点击下载vue.js创建一个id为app的div容器在script标签里,添加以下内容new Vue({ el:"#app", //指定模板目标 data:{ //数据内容(以对象形式) msg:"又见面了Vue", newMsg:"我和我的<b>祖国</b>", flag:true, titl_在vue脚手架中新增数据的弹窗怎么写
文章浏览阅读427次,点赞9次,收藏8次。更新yum源、安装zlib库、OpenSSL 库。二、安装openssl。查看openssl路径。查看openssl版本。三、openssh安装。查看openssh版本。重启并检查sshd服务。配置 OpenSSL。_ssh 升级
文章浏览阅读3.1k次,点赞6次,收藏74次。高级计量经济学及stata应用 陈强第十五章 短面板15.13短面板的stata命令及实例第十五章 短面板15.13短面板的stata命令及实例clear all cd "F:\stata经济数据分析"diruse traffic.dta, clear* 1 面板数据的设定* xtset panelvar timevar* encode country, gen(cntry) //假如panelvar是字符串,转换为数字型xtset state year* 显示数据结构* x_stata研究啤酒税与交通死亡率