首页 > 其他分享 >8.17总结

8.17总结

时间:2022-08-17 19:15:13浏览次数:79  
标签:总结 ch ll mid while 8.17 check suma

自动刷题机

\(solution\)
二分答案找最大最小值
考试时二分写错了

AC Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read()
{
	ll 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=1e5+5;
ll n,k,a[N];

ll check(ll x)
{
	int cnt=0;
	ll sum=0;
	for(int i=1;i<=n;++i){
		sum=max(0ll,sum+a[i]);
		if(sum>=x){
			++cnt;
			sum=0;
		}
	}
	return cnt;
}

ll ans1=-1,ans2=-1;

void get_max()
{
	ll l=1,r=1e18;
	while(l<=r){
		ll mid=(l+r)>>1;
		if(check(mid)>=k){
			if(check(mid)==k)ans2=mid;
			l=mid+1;
		}
		else if(check(mid)<k)
			r=mid-1;
	}
	return ;
}

void get_min()
{
	ll l=1,r=1e14;
	while(l<=r){
		ll mid=(l+r)>>1;
		if(check(mid)>k)
			l=mid+1;
		else if(check(mid)<=k){
			r=mid-1;
			if(check(mid)==k)ans1=mid;
		}
	}
	return ;
}

int main()
{
//	freopen("autoac.in","r",stdin);
//	freopen("autoac.out","w",stdout);
	n=read(),k=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
	}
	get_min();
	get_max();
	if(ans1==-1)printf("-1\n");
	else printf("%lld %lld\n",ans1,ans2);
	return 0;
}

生日聚会

随机序列

\(solution\)
找规律后,线段树维护
规律\(3^{n-1}*2*suma_1+3^{n-2}*2*suma_2+\cdots +3^0*2*suma_{n-1}+suma_n\),其中\(suma_i=\sum_{j=1}^{i}{a_j}\);

AC Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read()
{
	ll 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 mod=1e9+7;
const int N=1e5+5;
ll n,q,a[N];
ll dat[N];
//ll sum[N],dat[N],ans[N];

ll qow(ll x,ll y)
{
	ll res=1;
	while(y>0)
	{
		if(y&1)
		{
			res*=x;res%=mod;
		}
		x*=x;x%=mod;y>>=1;
	}
	return res%mod;
}

struct ww{
	int l,r;
	ll sum,tag=1;
}tr[N<<3];

void updat(int p)
{
	tr[p].sum=(tr[p<<1].sum%mod+tr[p<<1|1].sum%mod)%mod;
}

void build(int p,int l,int r)
{
	tr[p].l=l,tr[p].r=r;
	if(l==r)
	{
		tr[p].sum=dat[l]%mod;
		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].sum=(tr[p<<1].sum*tr[p].tag)%mod;
		tr[p<<1|1].sum=(tr[p<<1|1].sum*tr[p].tag)%mod;
		tr[p<<1].tag=(tr[p<<1].tag*tr[p].tag)%mod;
		tr[p<<1|1].tag=(tr[p<<1|1].tag*tr[p].tag)%mod;
		tr[p].tag=1;
	}
}

void change(int p,int l1,int r1,ll x)
{
	int l=tr[p].l,r=tr[p].r;
	if(r<l1||r1<l)return ;
	if(l1<=l&&r<=r1)
	{
		pushdown(p);
		tr[p].tag=(tr[p].tag*x)%mod;
		tr[p].sum=(tr[p].sum*tr[p].tag)%mod;
		return ;
	}
	pushdown(p);
	int mid=(l+r)>>1;
	if(l1<=mid)change(p<<1,l1,r1,x);
	if(r1>mid)change(p<<1|1,l1,r1,x);
	updat(p);
}

int main()
{
	n=read(),q=read();
	dat[n]=1;ll k=1;
	for(int i=n-1;i>=1;i--)
	{
		dat[i]=k*2%mod;
		k*=3;k%=mod;
	}
//	sum[0]=1;
	ll sum1=1;
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		sum1=sum1*a[i]%mod;
		dat[i]=sum1*dat[i]%mod;
//		sum[i]=sum[i-1]*a[i]%mod;
//		ans[i]=(dat[i]*sum[i]%mod+ans[i-1])%mod;
	}
	build(1,1,n);
	ll x,y;
	for(int i=1;i<=q;i++)
	{
		x=read(),y=read();
		ll tmp=qow(a[x],mod-2)%mod*y%mod;
		change(1,x,n,tmp);
		a[x]=y;
		printf("%lld\n",tr[1].sum%mod);
//		ll tmp=qow(a[x],mod-2);
//		for(int j=x;j<=n;j++)
//		{
//			sum[j]=sum[j]*tmp%mod*y%mod;
//			ans[j]=(dat[j]*sum[j]%mod+ans[j-1])%mod;
//		}
//		a[x]=y;
//		printf("%lld\n",ans[n]);
	}
	return 0;
}

标签:总结,ch,ll,mid,while,8.17,check,suma
From: https://www.cnblogs.com/mkik/p/16596454.html

相关文章

  • 2022/8/17 总结
    A.P4343[SHOI2015]自动刷题机啊对对对,算法都对了,二分写挂了:)Solution二分答案,每次\(\mathtt{O(n)}\)判断当前的\(mid\)是否可行,最大和最小分开二分;注意:......
  • [游记]暑假集训5-2022.8.17
    今天的题目都比较有思维量,嗯A.星际旅行考虑一下去掉那两条有向边,就是一个典型的欧拉回路然后问的就是能够生成的欧拉回路的个数考虑每次删掉两条边,有三种删除方法:$\q......
  • NOIP2022模拟赛二 By yzxoi 8.17
    Preface今天早上被公交车搞了,晚了30min才到……最后T1读入\(n\)的时候写%d了,喜提30pts(结果Rank竟然不变233)A.「NOIP2022模拟赛二ByyzxoiA」『Pale』/feat.初音ミ......
  • 前后端传值总结
    先讲下后端给前端传值,也就是controller跳到html页面时,向html传值的过程,一般2种方法。1.用Model//举个例子@RequestMapping("/toAgentInput")publicStringtoA......
  • 乘风破浪,遇见最美Windows 11之现代Windows开发运维 - Docker容器化镜像使用规范总结
    背景在通过Docker使用和打包容器化镜像的时候,很容易因为一些不规范的操作引发不必要的麻烦,下面总结一些规范项供参考。总结建议描述镜像构建除系统镜像外所......
  • Java面试知识点总结(二)
    字符串&集合面试题汇总一、Java中操作字符串都有哪些类?它们之间有什么区别?操作字符串的类有:String、StringBuffer、StringBuilder。String和StringBuffer、StringBu......
  • 时隔4个月我面试字节又挂了|总结与展望
    面试过程半个月之前,我又一次结束了字节的日常实习面试,前后持续一个多星期,每一面都是2天内出结果,第四面一周未出结果,询问hr,面试流程已经终止,是的,又挂了。相比于几个月的那......
  • 摸鱼喽哈哈!!!8.17 写了就是我的
    1、一个数组,有很多个字典 长这样:data_list=[{'Type1':114,'Type2':514},{'Type1':1919,'Type2':810}]一般json获取的数据,就可能会长成这个样子,问题不大可以直接df一下......
  • <摘自https://blog.csdn.net/JavaAndLI/article/details/125359786>SQL分页查询的写法
    MySQL的分页实现是使用LIMIT关键字。Oracle的分页是实现主要是基于rownum行号。SQLServer的分页主要使用的关键字是TOP。 具体用法总结如下:本文中的变量名词说明:1,......
  • LINUX 驱动例程总结
    **LINUX驱动例程总结****目录**1.使用主次设备号手动创建设备文件2.自动创建设备文件3.混杂设备驱动例程4.软中断之tasklet去实现软......