提高模考7.30 T4《柱状图》题解

你有本事真卡random_shuffle(),哥们,你能保证刚刚好1/n!概率卡死啊??

2 个赞

+1 @周

2 个赞

$ZGAUG_C72}GIVNPQ2O65


这两个式子区别真的很大对吧

1 个赞

我卡不掉不是你复杂度正确的理由。

1 个赞

不必卡死,卡住就行,不管怎样最坏复杂度包错的

既然这个解很难卡,就说明他是可用的,这和spfa的逻辑差不多

2 个赞

“可用”和“复杂度正确”又不是本质相同。

那你说一些随机化的题目那他的错误概率是1/998244353,那按照你的来说不就WA了吗

2 个赞

错解不都是因为在赛时的数据“可用”但是“复杂度不正确”所以才要卡吗。

所以有的卡哈希,你有意见?

1 个赞

但是那个可以卡,这个无法卡啊

1 个赞

找出来个类似的

#include<bits/stdc++.h>
#define ll long long
#define N 200005
using namespace std;
int n,lg[N];
int dp_a[N][25],dp_b[N][25];
ll ans=0;
int query_a(int l,int r){
    int k=lg[r-l+1];
    return min(dp_a[l][k],dp_a[r-(1<<k)+1][k]);
}
int query_b(int l,int r){
    int k=lg[r-l+1];
    return min(dp_b[l][k],dp_b[r-(1<<k)+1][k]);
}
vector<int> v;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
		scanf("%d%d",&dp_a[i][0],&dp_b[i][0]);
		v.push_back(i);
    }
    for(int i=2;i<=n;i++){
        lg[i]=lg[i>>1]+1;
    }
    for(int i=1;i<21;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			dp_a[j][i]=min(dp_a[j][i-1],dp_a[j+(1<<i-1)][i-1]);
			dp_b[j][i]=min(dp_b[j][i-1],dp_b[j+(1<<i-1)][i-1]);
		}
    }
    random_shuffle(v.begin(),v.end());
    for(auto i:v){
    	for(ll j=i;j<=n;j++){
    		ll x=1ll*query_a(i,j)*query_b(i,j);
    		ans=max(ans,x*(j-i+1));
    		j=(ans/x)+i-1;
		} 
	}
	cout<<ans;
    return 0;
}

@linan024

怎么,一起讨论的证明方法,老师教的,怎么就是抄袭了?

2 个赞

首先,我承认codeforces上面有随机化题目,错误率十分小。

但是和这个帖子的情况本质不同。这个是时间复杂度的问题不是正确性的问题。

1 个赞

本质肯定相同啊,WA和TLE不都是错吗。这两题中,WA 和 TLE 的概率都很小

2 个赞

那请你给出 TLE 的具体概率。

如何证明非常小,出题人没考虑到的方面就非常小吗

这么说其实所有的hash题错误率都是100

任何的hash都是可以卡的,除非你的模数是值域,直接T飞/cf

那你总结一下,就是出题人的问题了?就是老师的问题了?

2 个赞