当前位置: 首页 > news >正文

编程训练网站盘州网站建设

编程训练网站,盘州网站建设,做爰片的网站,wordpress 广告主题D - LIS 2 因为没有让你求方案数,所以还是比较好做的。 如果每一个连续段都退化成一个点,那么答案就是直接求 L I S LIS LIS。 否则,假设我们选了一些连续段把它们拼起来形成答案,显然我们有 r i 1 ≥ l i r_{i1}\ge l_i ri1​…

D - LIS 2

因为没有让你求方案数,所以还是比较好做的。

如果每一个连续段都退化成一个点,那么答案就是直接求 L I S LIS LIS

否则,假设我们选了一些连续段把它们拼起来形成答案,显然我们有 r i + 1 ≥ l i r_{i+1}\ge l_i ri+1li,否则这两段不能同时存在;并且其中一段不能包含另一段,否则可以把另一段删去。那么,如果 l i + 1 > r i l_{i+1}>r_i li+1>ri,答案显然就是两段的长度加起来;如果 l i + 1 ≥ r i l_{i+1}\ge r_i li+1ri,那么中间那一段重复的部分不管它,答案是 r i + 1 − l i + 1 r_{i+1}-l_i+1 ri+1li+1

用线段树维护就做完了。复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

E - Difference Sum Query

非常好的谜题。但是我不会。

首先,根据 a i b i \frac{a_i}{b_i} biai的范围不难得出新的区间长度不会超过原长度的 2 3 \frac{2}{3} 32,因此 X i ≤ log ⁡ N X_i\le \log N XilogN

然后,根据 { X i } \{X_i\} {Xi}的构造过程,我们可以建立一颗二叉树,那么一个点的值就是它的深度。显然 i i i i + 1 i+1 i+1之间是存在祖先关系的,因此问题转化为从 l l l走到 l + 1 , . . . , r l+1,...,r l+1,...,r过程中经过的路径长度。

做到这一步,感觉非常不可做。我们需要非常神奇的结论:假设让 r r r重新走回 l l l,那么答案就是 [ l , r ] [l,r] [l,r]之间的点组成的虚树的边的数目乘 2 2 2。这非常好理解,因为上述过程恰好就是做了一遍 D F S DFS DFS。今天思路实在是非常混乱,不过我们还是尝试证明一下这个结论。事实上我们只需要用到:因为是二叉搜索树,所以子树内编号是连续的,因此进入一个子树后会把会把子树内能走的点走完,出去后就再也进不来了。

那么我们只要求出虚树点的数目即可。显然只需要求 l , r l,r l,r路径上的编号不在 [ l , r ] [l,r] [l,r]之间的点的数目,复杂度 O ( log ⁡ n ) O(\log n) O(logn)

就这样吧。今日状态不佳。

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define inf 0x3f3f3f3f
using namespace std;
ll n,m,Q,a[105],b[105];
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=0;i<m;i++)cin>>a[i]>>b[i];cin>>Q;while(Q--){ll c,d;cin>>c>>d;ll l=1,r=n;ll numc=0,depc=0,t=0;while(1){ll M=(l*a[t]+r*b[t])/(a[t]+b[t]);if(M==c)break;if(M<c){numc++,l=M+1;}else r=M-1;t=(t+1)%m;depc++;}l=1,r=n;ll numd=0,depd=0;t=0;while(1){ll M=(l*a[t]+r*b[t])/(a[t]+b[t]);if(M==d)break;if(M>d){numd++,r=M-1;}else l=M+1;t=(t+1)%m;depd++;}ll res=2*(numc+numd+d-c)-depc-depd;cout<<res<<"\n";}
}

F - Good Division

最近只会抄 std \text{std} std了,算了摆了

首先一眼真 不难看出序列合法的充要条件是不存在绝对众数

然后似乎也没有什么特别好的思路,不妨还是尝试一下当确定绝对众数为 v v v的情形,并且我们用总方案数减去不合法的方案数。那么将 ( a 2 i − 1 , a 2 i ) (a_{2i-1},a_{2i}) (a2i1,a2i)看成一个权值在 [ − 1 , 1 ] [-1,1] [1,1]之间的数(记作 b i b_i bi),我们需要对后缀和 > 0 >0 >0的位置求和。

让我们跳出这个 d p dp dp。考虑对于固定的 v v v,如果对位置 i i i造成影响,那么一定存在 j < i j<i j<i,使得 S j < S i S_j<S_i Sj<Si。分析可知,这样的 i i i不会超过 c n t v cnt_v cntv个。

同时对于一个 j j j,我们还要知道它会对那些 v v v造成贡献。显然这样的 j j j也不会超过 c n t v cnt_v cntv个。

那么将这些信息预处理出来即可。注意还是要写离散化。

复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

没什么状态就写一下代码吧

反思:这道题做了两个下午才 A A A掉,说明自己的代码能力还是不够(或者说想得还是不够)。应该引起重视。

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define inf 0x3f3f3f3f
using namespace std;
const int N=2e6+5;
const int mod=998244353;
int n,a[N],cnt[N],*f[N];
int bit[N*2],len,dp[N];
vector<pair<int,int>>G[N];
vector<pair<int,int>>maj[N];
vector<pair<int,int>>maj2[N];
vector<int>lsh[N];
int qry(int v,int x){int tot(0);for(;x;x-=x&-x)tot=(tot+f[v][x])%mod;return tot;
}
void upd(int v,int x,int y){for(;x<=2*cnt[v];x+=x&-x)f[v][x]=(f[v][x]+y)%mod;
}
int get(int x,int y){return lower_bound(lsh[x].begin(),lsh[x].end(),y)-lsh[x].begin()+1;
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=2*n;i++)cin>>a[i],cnt[a[i]]++;//fixedfor(int i=1;i<=2*n;i++)f[i]=bit+len,len+=2*cnt[i]+1;for(int i=1;i<=n;i++){if(a[2*i-1]==a[2*i]){G[a[2*i-1]].pb({i,1});}else{G[a[2*i-1]].pb({i,0});G[a[2*i]].pb({i,0});}}//fixedfor(int i=1;i<=2*n;i++){int sumnow=0,sumpre=0,pos=0,sumval=-n;for(auto x:G[i]){while(sumnow-1>sumpre&&pos+1<x.fi)sumnow--,pos++,maj[pos].pb({i,sumnow}),lsh[i].pb(sumnow);sumnow-=x.fi-pos-1;//全是-1sumpre=min(sumpre,sumnow);pos=x.fi;if((sumnow+=x.se)>sumpre)maj[x.fi].pb({i,sumnow}),lsh[i].pb(sumnow);sumval+=1+x.se;}while(sumnow-1>sumpre&&pos+1<=n)sumnow--,pos++,maj[pos].pb({i,sumnow}),lsh[i].pb(sumnow);reverse(G[i].begin(),G[i].end());sumnow=0,sumpre=0,pos=n+1;for(auto x:G[i]){while(sumnow-1>sumpre&&pos-1>x.fi)sumnow--,pos--,maj2[pos-1].pb({i,sumval-sumnow}),lsh[i].pb(sumval-sumnow);sumnow-=pos-x.fi-1;sumpre=min(sumpre,sumnow);pos=x.fi;if((sumnow+=x.se)>sumpre){maj2[pos-1].pb({i,sumval-sumnow}),lsh[i].pb(sumval-sumnow);}}while(sumnow-1>sumpre&&pos-1>=1)sumnow--,pos--,maj2[pos-1].pb({i,sumval-sumnow}),lsh[i].pb(sumval-sumnow);sort(lsh[i].begin(),lsh[i].end());lsh[i].erase(unique(lsh[i].begin(),lsh[i].end()),lsh[i].end());}//fixedint sumpre=1;for(int i=0;i<=n;i++){dp[i]=sumpre;for(auto x:maj[i]){dp[i]=(dp[i]-qry(x.fi,get(x.fi,x.se)-1))%mod;}for(auto x:maj2[i]){upd(x.fi,get(x.fi,x.se),dp[i]);}if(i)sumpre=(sumpre+dp[i])%mod;}cout<<(dp[n]+mod)%mod<<"\n";
}
http://www.yayakq.cn/news/996516/

相关文章:

  • 外贸网站的特色山东建设银行招聘网站
  • 网站开发运行环境论文小说推广关键词怎么弄
  • 营销型网站建设哪家便宜哪个网站做自考题目免费
  • 网站网络推广策略和电子商务潍坊网站公司网络科技
  • 快速的网站开发工具手机app开发软件制作
  • 网站建设设计报告前言如何搜索到自己的网站
  • 民政 门户网站 建设搞笑幽默网站源码最新
  • 网站开发 项目章程建设银行的财务网站
  • 外国炫酷网站网站建设安全方案
  • 群晖做自己的电影网站服务器网站搬家
  • 广州微网站建设咨询寺院网站建设方案
  • 优化神马网站关键词排名价格h5制作软件免费手机版下载
  • 网站备案 座机号码wordpress 增加阅读量
  • 响应式网站框架2017如何做企业网站
  • 网站建设案例教程视频教程厦门网站制作推广
  • 七米网站建设智能建造技术就业前景
  • 茶叶网站策划三维设计官网
  • 公司网站有时登不进 服务器广州南沙建设网站
  • 有没有免费的网站服务器做传奇网站怎么弄的
  • 企业手机端网站模板下载什么网站可以做相册视频
  • 三亚网站推广团队弄个网站多少钱
  • 网站建设合同图片东莞房价会跌吗
  • 微信链接网站怎么做的wordpress返回主页标签
  • 做网站投资要多少钱惠来网站建设
  • 网站推广视频的服务方案牙医工具网站建设课程设计报告
  • 青岛胶南做网站的有多少注册网站用的信用卡
  • 金华企业制作网站现在网站开发哪个语言好
  • 一家专门做母婴的网站网站建设服务公司选哪家比较好?
  • 资兴网站设计网站信息安全监测建设方案
  • 怎么在网站注册账号程序员前端和后端的区别