两个RE,求怎么优化

P1311 [NOIP2011 提高组] 选择客栈

#Me too! ```cpp #include<bits/stdc++.h> using namespace std; int x[51][200010]; int a[200010],b[200010]; int f[200010]; int n,k,p; inline void read(int &x) { x=0; char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+(ch^48),ch=getchar(); } int main() { read(n),read(k),read(p); int mini=2147483647,maxi=0; for(int i=1;i<=n;++i)read(a[i]),read(b[i]),mini=min(mini,a[i]),maxi=max(maxi,a[i]); for(int i=1;i<=n;++i)x[a[i]][++x[a[i]][0]]=i; for(int i=1;i<=n;++i) if(b[i]<=p)f[i]=f[i-1]+1; else f[i]=f[i-1]; long long ans=0; for(int i=mini;i<=maxi;++i) for(int j=1;j<x[i][0];++j) for(int s=j+1;s<=x[i][0];++s) if(f[x[i][s]]>f[x[i][j]-1])ans++; printf("%lld",ans); return 0; } ```
by qianfujia @ 2017-12-07 20:30:27


#手开O2(滑稽) ```cpp #include<bits/stdc++.h> #pragma GCC optimize(2) using namespace std; long long x[51][200010]; long long a[200010],b[200010]; long long f[200010]; long long n,k,p; inline void read(long long &x) { x=0; char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+(ch^48),ch=getchar(); } int main() { read(n),read(k),read(p); long long mini=2147483647,maxi=0; for(long long i=1;i<=n;++i)read(a[i]),read(b[i]),mini=min(mini,a[i]),maxi=max(maxi,a[i]); for(long long i=1;i<=n;++i)x[a[i]][++x[a[i]][0]]=i; for(long long i=1;i<=n;++i) if(b[i]<=p)f[i]=f[i-1]+1; else f[i]=f[i-1]; long long ans=0; for(long long i=mini;i<=maxi;++i) for(long long j=1;j<x[i][0];++j) for(long long s=j+1;s<=x[i][0];++s) if(f[x[i][s]]>f[x[i][j]-1])ans++; printf("%lld",ans); return 0; } ```
by qianfujia @ 2017-12-07 20:41:31


|