首页 > 其他分享 >8.18总结

8.18总结

时间:2022-08-18 18:25:42浏览次数:76  
标签:总结 ch int solution 8.18 lmid getchar

泡泡堂

\(solution\)

苹果树

\(solution\)

字符合并

\(solution\)

脑洞治疗仪

\(solution\)
万万没想到,我50pts的原因是数组没开够
线段树维护修改操作,注意先挖后补

AC Code
#include<bits/stdc++.h>
using namespace std;

inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}

const int N=2e5+5;
int n,m;

struct ww{
	int l,r,sum,lm,rm,len;
	int dat,tag;
}tr[N*8];

void updat(int p)
{
	tr[p].sum=max(max(tr[p<<1].sum,tr[p<<1|1].sum),tr[p<<1].rm+tr[p<<1|1].lm);
	tr[p].dat=tr[p<<1].dat+tr[p<<1|1].dat;
	if(tr[p<<1].sum==tr[p<<1].len)
	{
		tr[p].lm=tr[p<<1].len+tr[p<<1|1].lm;
	}
	else tr[p].lm=tr[p<<1].lm;
	if(tr[p<<1|1].sum==tr[p<<1|1].len)
	{
		tr[p].rm=tr[p<<1|1].len+tr[p<<1].rm;
	}
	else tr[p].rm=tr[p<<1|1].rm;
}

void build(int p,int l,int r)
{
	tr[p].l=l,tr[p].r=r;
	tr[p].len=r-l+1;
	if(l==r)return ;
	int mid=(l+r)>>1;
	build(p<<1,l,mid);
	build(p<<1|1,mid+1,r);
	updat(p);
}

void pushdown(int p)
{
	if(tr[p].tag==1)
	{
		tr[p<<1].tag=1;
		tr[p<<1].sum=tr[p<<1].lm=tr[p<<1].rm=tr[p<<1].dat=tr[p<<1].len;
		tr[p<<1|1].tag=1;
		tr[p<<1|1].sum=tr[p<<1|1].lm=tr[p<<1|1].rm=tr[p<<1|1].dat=tr[p<<1|1].len;
		tr[p].tag=0;
	}
	if(tr[p].tag==2)
	{
		tr[p<<1].tag=2;
		tr[p<<1].sum=tr[p<<1].lm=tr[p<<1].rm=tr[p<<1].dat=0;
		tr[p<<1|1].tag=2;
		tr[p<<1|1].sum=tr[p<<1|1].lm=tr[p<<1|1].rm=tr[p<<1|1].dat=0;
		tr[p].tag=0;
	}
}

void change1(int p,int l,int r)
{
	int l1=tr[p].l,r1=tr[p].r;
	if(r1<l||r<l1)return ;
	if(l<=l1&&r1<=r)
	{
		pushdown(p);
		tr[p].tag=1;
		tr[p].sum=tr[p].lm=tr[p].rm=tr[p].dat=tr[p].len;
		return ;
	}
	pushdown(p);
	int mid=(l1+r1)>>1;
	if(l<=mid)change1(p<<1,l,r);
	if(r>mid)change1(p<<1|1,l,r);
	updat(p);
}

ww ask1(int p,int l,int r)
{
	int l1=tr[p].l,r1=tr[p].r;
	if(l<=l1&&r1<=r)
	{
		pushdown(p);
		return tr[p];
	}
	pushdown(p);
	ww ans,tr1,tr2;
	int o1=0,o2=0;
	int mid=(l1+r1)>>1;
	if(l<=mid)
	{
		tr1=ask1(p<<1,l,r);
		o1=1;
	}
	if(r>mid)
	{
		tr2=ask1(p<<1|1,l,r);
		o2=1;
	}
	updat(p);
	if(o1==0)return tr2;
	if(o2==0)return tr1;
	ans.sum=max(max(tr1.sum,tr2.sum),tr1.rm+tr2.lm);
	ans.len=tr1.len+tr2.len;
	if(tr1.sum==tr1.len)
	{
		ans.lm=tr1.len+tr2.lm;
	}
	else ans.lm=tr1.lm;
	if(tr2.sum==tr2.len)
	{
		ans.rm=tr2.len+tr1.rm;
	}
	else ans.rm=tr2.rm;
	return ans;
}

int ask2(int p,int l,int r)
{
	int l1=tr[p].l,r1=tr[p].r;
	if(r1<l||r<l1)return 0;
	if(l<=l1&&r1<=r)
	{
		pushdown(p);
		return tr[p].dat;
	}
	pushdown(p);
	int ans=0;
	int mid=(l1+r1)>>1;
	if(l<=mid)ans+=ask2(p<<1,l,r);
	if(r>mid)ans+=ask2(p<<1|1,l,r);
	updat(p);
	return ans;
}

int dat1;

void change2(int p,int l,int r)
{
	int l1=tr[p].l,r1=tr[p].r;
	if(r1<l||r<l1)return ;
	if(dat1==0)return ;
	if(l<=l1&&r1<=r&&tr[p].dat<=dat1)
	{
		dat1-=tr[p].dat;
		pushdown(p);
		tr[p].tag=2;
		tr[p].sum=tr[p].dat=tr[p].lm=tr[p].rm=0;
		return ;
	}
	pushdown(p);
	int mid=(l1+r1)>>1;
	if(l<=mid)change2(p<<1,l,r);
	if(r>mid)change2(p<<1|1,l,r);
	updat(p);
}

int main()
{
//	freopen("head.in","r",stdin);
//	freopen("head.out","w",stdout);
	n=read(),m=read();
	int opt,l,r;
	build(1,1,n);
	for(int i=1;i<=m;i++)
	{
		opt=read(),l=read(),r=read();
		if(opt==0)
		{
			change1(1,l,r);
		}
		else if(opt==1)
		{
			int l1,r1;
			l1=read(),r1=read();
			dat1=r-l+1-ask2(1,l,r);
			change1(1,l,r);
			change2(1,l1,r1);
		}
		else
		{
			int tmp=ask1(1,l,r).sum;
			printf("%d\n",tmp);
		}
	}
	return 0;
}

标签:总结,ch,int,solution,8.18,lmid,getchar
From: https://www.cnblogs.com/mkik/p/16599691.html

相关文章

  • 8.18集训
    回到了Luogu,继续刷COCI……上午事实证明后三题是可做题,前三题不大可做。T1P6405开始码了一个相邻的树木连边,边权设为相等的时间,然后点边互换跑连通块算大小,默认恒等......
  • NOIP2022模拟赛一 By RSJ 08.18
    A.「NOIP2022模拟赛一ByRSJ」StringSearchPro给定一个\(01\)字符串,查找一个子串使得\(0\)在这个子串中出现了\(\frac{p}{q}\cdotk\)次,其中\(k\)是子串长度\(n,p,q......
  • 字符串类模板及总结(随缘更新)
    昨晚与集训队的诸位聚餐,得悉弘毅的选拔比预想中要近,而且英语入学考也会与是否大一能参加四级考有关。结束后,第一次来到武大ACM训练室,被一桌论文、草稿、书籍、KFC、外卖袋......
  • 前端下载的方式总结(url,文件流,压缩包)
    1.比较常见的是通过a标签的href属性直接访问文件url地址。(1)constdownloadUrl=(url:string,file_name?:string)=>{if(url){url=url.replace(/^http/......
  • Java面试知识点总结(三)
    Java并发编程一、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"......
  • 【技术总结】大数据开发模块化知识体系、学习路线及对应的资料推荐
    〇、概述1、常用网站2、常用资料一、环境LinuxShellGitMavenDockerK8SRancher二、数据库MySQLOracleSqlServerPostgreSQLHBASEClickHouse三、ETL工具K......
  • 暑假第七周总结
     集群启动(node1执行)格式化1hdfsnamenode-formatSH脚本一键启动12start-dfs.shstart-yarn.shSHELL日志目录**/export/server/hadoop-3.3......
  • 算法总结
    继续字符串的算法题:packagecom.chenghaixiang.jianzhi2.day12;importjava.util.Deque;importjava.util.LinkedList;/***@author程海翔*@school石家庄铁......
  • 8.17总结
    自动刷题机\(solution\)二分答案找最大最小值考试时二分写错了ACCode#include<bits/stdc++.h>usingnamespacestd;#definelllonglonginlinellread(){ ll......
  • 2022/8/17 总结
    A.P4343[SHOI2015]自动刷题机啊对对对,算法都对了,二分写挂了:)Solution二分答案,每次\(\mathtt{O(n)}\)判断当前的\(mid\)是否可行,最大和最小分开二分;注意:......