[Codeforces]CF742(Div.2)A-E
CF742(Div.2)
https://codeforces.com/problemset/problem/1567/A ,签到
https://codeforces.com/problemset/problem/1567/B ,首先答案至少是a,也就是至少要有
https://codeforces.com/problemset/problem/1567/C ,这题好难啊——,注意到进位全部往高位移一位之后,第0位进位给第2位,第1位给第3位,第2位给第4位,嗯就是奇数位单独进位,偶数位单独进位,所以把数字的位置按奇偶拆开成
https://codeforces.com/problemset/problem/1567/D ,算个构造题(?),就是说
首先答案肯定不会超过把
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define endl '\n' #define mp make_pair #define pb push_back #define fi first #define se second typedef long long ll; typedef pair<int,int> pii; typedef pair<double,int> pdi; typedef vector<int> vi; const int N=105; int T,n,s,cnt; int a[N],pw10[N]; void solve() { sort(a+1,a+cnt+1); rep(i,1,cnt)rep(j,0,9)if(pw10[j]<a[i]&&a[i]<pw10[j+1]) { a[++cnt]=pw10[j]; a[i]=a[i]-pw10[j]; return; } rep(i,1,cnt)rep(j,1,9)if(a[i]==pw10[j]) { a[++cnt]=pw10[j-1]; a[i]=a[i]-pw10[j-1]; return; } } int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); pw10[0]=1; rep(i,1,9)pw10[i]=pw10[i-1]*10; cin>>T; rep(tc,1,T) { cin>>s>>n; cnt=1;a[cnt]=s; while(cnt<n)solve(); sort(a+1,a+n+1); rep(i,1,n)cout<<a[i]<<' ';cout<<endl; } return 0; }
https://codeforces.com/problemset/problem/1567/E ,线段树,我维护的方法比较暴力,每个节点存上答案、区间长度、左右端点的值,以及最长non-decreasing的prefix和suffix长度。
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define endl '\n' #define mp make_pair #define pb push_back #define fi first #define se second typedef long long ll; typedef pair<int,int> pii; typedef pair<double,int> pdi; typedef vector<int> vi; const int N=2e5+5; struct nod { ll s; int len,vl,vr,len_l,len_r; }tr[N<<2]; int n,q; int a[N]; #define lson (node<<1) #define rson (node<<1|1) ll calc(ll x){return 1ll*x*(x+1)/2;} nod merge(nod ls,nod rs) { nod ret; ret.vl=ls.vl;ret.len_l=ls.len_l; ret.vr=rs.vr;ret.len_r=rs.len_r; ret.len=ls.len+rs.len; if(ls.vr>rs.vl)ret.s=ls.s+rs.s; else { ret.s=ls.s+rs.s-calc(ls.len_r)-calc(rs.len_l) +calc(ls.len_r+rs.len_l); if(ls.len==ls.len_l) ret.len_l=ls.len_l+rs.len_l; if(rs.len==rs.len_r) ret.len_r=rs.len_r+ls.len_r; } return ret; } void push_up(int node) { tr[node]=merge(tr[lson],tr[rson]); } void build(int node,int l,int r) { if(l==r) { tr[node].s=tr[node].len=tr[node].len_l=tr[node].len_r=1; tr[node].vl=tr[node].vr=a[l]; return; } int mid=(l+r)>>1; build(lson,l,mid);build(rson,mid+1,r); push_up(node); } nod query(int node,int l,int r,int ql,int qr) { if(ql<=l&&r<=qr)return tr[node]; int mid=(l+r)>>1; nod ls,rs; ls.len=rs.len=-1; if(mid>=ql)ls=query(lson,l,mid,ql,qr); if(mid+1<=qr)rs=query(rson,mid+1,r,ql,qr); if(ls.len==-1)return rs; else if(rs.len==-1)return ls; else return merge(ls,rs); } void modify(int node,int l,int r,int x,int y) { if(l==r)//Here!Not l==x hhh { tr[node].vl=tr[node].vr=y; return; } int mid=(l+r)>>1; if(mid>=x)modify(lson,l,mid,x,y); else modify(rson,mid+1,r,x,y); push_up(node); } int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>q; rep(i,1,n)cin>>a[i]; build(1,1,n); rep(i,1,q) { int op,x,y; cin>>op>>x>>y; if(op==1)modify(1,1,n,x,y); else cout<<query(1,1,n,x,y).s<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律