社区讨论
有关时间复杂度
学术版参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @ly2zkf3o
- 此快照首次捕获于
- 2024/07/01 20:58 2 年前
- 此快照最后确认于
- 2024/07/02 08:56 2 年前
rt
这是某道笛卡尔树题,,时限 秒
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5000+5;
int n,ans;
int a[N];
int sta[N],stalen;
int son[N][2];
int dfs(int x,int l,int r,int del){
if(l>r){
return 0;
}
if(l==r){
if(del!=a[x]){
return 1;
}
return 0;
}
int sum=a[x]-del,sum1=1;
if(son[x][0]){
sum+=dfs(son[x][0],l,x-1,a[x]);
sum1+=dfs(son[x][0],l,x-1,del);
}
if(son[x][1]){
sum+=dfs(son[x][1],x+1,r,a[x]);
sum1+=dfs(son[x][1],x+1,r,del);
}
// printf("{%d %d %d %d}\n",x,l,r,del);
// printf("[[%d %d]]\n",sum,sum1);
// return min(sum,r-l+1);
return min(sum,sum1);
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;i++){
while(stalen>=1&&a[sta[stalen]]>a[i]){
stalen--;
}
son[i][0]=son[sta[stalen]][1];
son[sta[stalen]][1]=i;
sta[++stalen]=i;
}
// for(int i=1;i<=n;i++){
// printf("[%d %d]\n",son[i][0],son[i][1]);
// }
printf("%lld",dfs(sta[1],1,n,0));
return 0;
}
上面的代码T飞了
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5000+5;
int n,ans;
int a[N];
int sta[N],stalen;
int son[N][2];
int dfs(int x,int l,int r,int del){
if(l>r){
return 0;
}
if(l==r){
if(del!=a[x]){
return 1;
}
return 0;
}
int sum=a[x]-del,sum1=1;
if(son[x][0]){
sum+=dfs(son[x][0],l,x-1,a[x]);
// sum1+=dfs(son[x][0],l,x-1,del);
}
if(son[x][1]){
sum+=dfs(son[x][1],x+1,r,a[x]);
// sum1+=dfs(son[x][1],x+1,r,del);
}
// printf("{%d %d %d %d}\n",x,l,r,del);
// printf("[[%d %d]]\n",sum,sum1);
return min(sum,r-l+1);
// return min(sum,sum1);
}
//上面是两串代码的唯一区别
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;i++){
while(stalen>=1&&a[sta[stalen]]>a[i]){
stalen--;
}
son[i][0]=son[sta[stalen]][1];
son[sta[stalen]][1]=i;
sta[++stalen]=i;
}
// for(int i=1;i<=n;i++){
// printf("[%d %d]\n",son[i][0],son[i][1]);
// }
printf("%lld",dfs(sta[1],1,n,0));
return 0;
}
而上面的代码没有T
why?
回复
共 5 条回复,欢迎继续交流。
正在加载回复...