NEERC 17 G.The Great Wall

博客围绕NEERC 17 G.The Great Wall题目展开,先通过削减一维简化问题,确定a、b、c集合关系。接着令bi′、ci′,二分答案k,分x+r−1≥y和x+r−1<y两种情况用二维数点解决,最终得出时间复杂度为O(nlg2n)。

NEERC 17 G.The Great Wall

Solution

这题的第一步tricktricktrick是:我们注意到取a,b,ca,b,ca,b,c的集合两两不交且并集为UUU,因此确定了b,cb,cb,c之后可以简单地唯一确定aaa,于是我们通过让bi−=ai,ci−=ai,Ans+=∑aib_i-=a_i,c_i-=a_i,Ans+=\sum a_ibi=ai,ci=ai,Ans+=ai来削减一维。

然后令bi′=∑j=1ibib'_i=\sum_{j=1}^ib_ibi=j=1ibici′=∑j=1icic'_i=\sum_{j=1}^ic_ici=j=1ici,二分答案kkk

  • x+r−1≥yx+r-1\geq yx+r1ysum=cx+r−1′−cy−1′+by−1′−bx−1′+by+r−1′−bx+r−1′=(cx+r−1′−bx−1′−bx+r−1′)+(−cy−1′+by−1′+by+r−1′)≤ksum=c'_{x+r-1}-c'_{y-1}+b'_{y-1}-b'_{x-1}+b'_{y+r-1}-b'_{x+r-1}=(c'_{x+r-1}-b'_{x-1}-b'_{x+r-1})+(-c'_{y-1}+b'_{y-1}+b'_{y+r-1})\leq ksum=cx+r1cy1+by1bx1+by+r1bx+r1=(cx+r1bx1bx+r1)+(cy1+by1+by+r1)k,可以简单地用二维数点解决。
  • x+r−1<yx+r-1<yx+r1<ysum=(bx+r−1′−bx−1′)+(by+r−1′−by−1′)≤ksum=(b'_{x+r-1}-b'_{x-1})+(b'_{y+r-1}-b'_{y-1})\leq ksum=(bx+r1bx1)+(by+r1by1)k,同样可以简单地用二维数点解决。

时间复杂度O(nlg2n)O(n lg^2n)O(nlg2n)

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>

#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se second

using namespace std;

template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }

typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;

const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline ll read()
{
	ll f=1,x=0; char c=getchar();
	while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }
	while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }
	return x*f;
}
int n,r,s[MAXN];
ll p[MAXN],b[MAXN],c[MAXN],B[MAXN],a[MAXN],k;
void add(int x,int y) { if (!x) return; for (;x<=n-r+1;x+=x&(-x)) s[x]+=y; }
int query(int x) { upmin(x,n-r+1); int ans=0; for (;x;x-=x&(-x)) ans+=s[x]; return ans; }
ll solve1(ll x)
{
	ll ans=0;
	for (int i=1;i<=n-r+1;i++) B[i]=p[i]=-c[i-1]+b[i-1]+b[i+r-1];
	sort(p+1,p+n-r+2);
	for (int i=1;i<=n-r+1;i++) B[i]=lower_bound(p+1,p+n-r+2,B[i])-p;
	for (int i=1;i<=r-1;i++) add(B[i],1);
	for (int i=1;i<=n-r+1;i++)
	{
		add(B[i],-1);
		if (i<=n-r-r+2) add(B[i+r-1],1);
		ans+=query(upper_bound(p+1,p+n-r+2,x-(c[i+r-1]-b[i-1]-b[i+r-1]))-p-1);
	}
	return ans;
}
ll solve2(ll x)
{
	ll ans=0;
	for (int i=1;i<=n-r+1;i++) B[i]=p[i]=b[i+r-1]-b[i-1];
	sort(p+1,p+n-r+2);
	for (int i=1;i<=n-r+1;i++) B[i]=lower_bound(p+1,p+n-r+2,B[i])-p;
	for (int i=r;i<=n-r+1;i++) add(B[i],1);
	for (int i=1;i<=n-r+1;i++)
	{
		if (i<=n-r-r+2) add(B[i+r-1],-1);
		ans+=query(upper_bound(p+1,p+n-r+2,x-(b[i+r-1]-b[i-1]))-p-1);
	}
	return ans;
}
signed main()
{
	ll sum=0;
	n=read(),r=read(),k=read();
	for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
	for (int i=1;i<=n;i++) b[i]=read()-a[i]+b[i-1];
	for (int i=1;i<=n;i++) c[i]=read()-a[i]+c[i-1];
	
	ll l=0,r=1000000ll*n;
	while (l<r)
	{
		ll mid=(l+r)>>1,t=solve1(mid)+solve2(mid);
		if (t>=k) r=mid;
		else l=mid+1;
	}
	printf("%lld\n",r+sum);
	return 0;
}
【源码免费下载链接】:https://renmaiwang.cn/s/fb7fi UPF流程详解:Unified Power Format(UPF)是一种规范化的文件格式,用于约束芯片中的电源域设计。在RTL设计到GDSII生成的全过程中,各EDA工具均可读取UPF文件完成相关处理工作。UPF的诞生旨在应对低功耗设计挑战,提供一种通用的标准来描述芯片中的电源区域结构。从历史发展来看,UPF经历了多个版本的演进。2007年2月22日,Synopsys、Mentor Graphics和Magma Design Automation公司联合发布UPF 1.0标准;随后,Cadence设计系统公司开发的通用功率格式(CPF-Common Power Format)向行业开放。2009年3月27日,IEEE及多家合作伙伴共同推出了UPF 2.0标准;2013年5月29日,该标准被更新为UPF 2.1;2015年12月5日,则升级至UPF 3.0。在培训课程中,UPF 1.0和UPF 2.0均有所涉及,但UPF 2.0已取代其他版本成为主流选择。要采用UPF 2.0标准,则需要更新部分EDA工具以支持其功能。UPF涵盖了多个低功耗单元,包括Level-shifter、Isolation Cell、Power Gating cells以及Always-on单元。其中,Level-shifter用于实现不同电压域之间的信号电平转换;Isolation Cell用于电源关断技术,在电源关闭时输出信号处于不确定状态,从而导致负载单元产生内部电流,造成不必要的功耗;Power Gating cells则通过选择性地开启或关闭VDD与VSS的连接来实现电源管理;而Retention-Register则负责在电源关断模块要求下锁存或恢复数据。使用UPF时,需确保选用支持其功能的工具。例如,Synop
解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录" 解决个别微信版本,登录提示:"当前客户端版本过低,请前往应用商店
### 应用场景介绍 此应用程序是一个基于 Flet 框架构建的桌面登录验证系统。主要功能包括: - **用户注册**:允许新用户输入用户名和密码进行注册。 - **用户登录**:已注册用户可以通过输入用户名和密码进行登录。 - **主界面**:登录成功后,用户将进入主界面,显示欢迎信息,并提供退出按钮返回登录界面。 - **数据库存储**:使用 SQLite 数据库存储用户信息,确保数据的安全性和持久化。 ### 特色说明 1. **简洁的用户界面**: - 使用 Flet 框架构建,界面简洁美观,易于操作。 - 注册和登录页面设计一致,用户体验良好。 2. **数据持久化**: - 使用 SQLite 数据库存储用户信息,确保数据不会因程序关闭而丢失。 - 数据库表结构简单,便于维护和扩展。 3. **安全的密码管理**: - 密码字段使用 `password=True` 属性,隐藏输入内容,增加安全性。 - 用户名和密码的校验逻辑完善,防止空输入和重复注册。 4. **动态消息提示**: - 注册和登录过程中,根据用户输入和操作结果,动态显示成功或失败的消息提示。 - 消息颜色根据结果变化,绿色表示成功,红色表示失败。 5. **灵活的页面切换**: - 通过 `show_page` 函数统一管理页面显示,确保页面切换流畅。 - 注册和登录页面之间可以互相跳转,方便用户操作。 6. **资源管理**: - 在程序关闭时,自动关闭数据库连接,释放资源,确保程序的稳定性。 ### 总结 该应用程序通过 Flet 框架和 SQLite 数据库的结合,实现了一个功能完整、界面友好的用户注册和登录系统。适用于需要用户身份验证的小型桌面应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值