1 条题解
-
0
自动搬运
来自洛谷,原作者为

AubRain
**搬运于
2025-08-24 21:52:24,当前版本为作者最后更新于2018-09-14 08:55:47,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
大家好,我用暴力过了这道题,特地来分享一波卡常技巧。不喜请轻喷。
首先看到数据范围只有,而且时间居然开了,这是我们暴力的前提。
这里默认大家都理解了这道题的意思,然后就是我的一些经验了。
1、++i 比 i++ 要快。
2、语句数量要尽量少,能压成一句话就要压。
3、能不用就别用,只有在需要的地方开。
4、 循环速度要比 循环速度快好多。
5、尽量不要取模!!,先估算一下时机,到快要爆 的时候再取模!(会快很多)
6、别忘了打开各种优化开关。以下是模板。
%:pragma GCC optimize(3) %:pragma GCC optimize("Ofast") %:pragma GCC optimize("inline") %:pragma GCC optimize("-fgcse") %:pragma GCC optimize("-fgcse-lm") %:pragma GCC optimize("-fipa-sra") %:pragma GCC optimize("-ftree-pre") %:pragma GCC optimize("-ftree-vrp") %:pragma GCC optimize("-fpeephole2") %:pragma GCC optimize("-ffast-math") %:pragma GCC optimize("-fsched-spec") %:pragma GCC optimize("unroll-loops") %:pragma GCC optimize("-falign-jumps") %:pragma GCC optimize("-falign-loops") %:pragma GCC optimize("-falign-labels") %:pragma GCC optimize("-fdevirtualize") %:pragma GCC optimize("-fcaller-saves") %:pragma GCC optimize("-fcrossjumping") %:pragma GCC optimize("-fthread-jumps") %:pragma GCC optimize("-funroll-loops") %:pragma GCC optimize("-fwhole-program") %:pragma GCC optimize("-freorder-blocks") %:pragma GCC optimize("-fschedule-insns") %:pragma GCC optimize("inline-functions") %:pragma GCC optimize("-ftree-tail-merge") %:pragma GCC optimize("-fschedule-insns2") %:pragma GCC optimize("-fstrict-aliasing") %:pragma GCC optimize("-fstrict-overflow") %:pragma GCC optimize("-falign-functions") %:pragma GCC optimize("-fcse-skip-blocks") %:pragma GCC optimize("-fcse-follow-jumps") %:pragma GCC optimize("-fsched-interblock") %:pragma GCC optimize("-fpartial-inlining") %:pragma GCC optimize("no-stack-protector") %:pragma GCC optimize("-freorder-functions") %:pragma GCC optimize("-findirect-inlining") %:pragma GCC optimize("-fhoist-adjacent-loads") %:pragma GCC optimize("-frerun-cse-after-loop") %:pragma GCC optimize("inline-small-functions") %:pragma GCC optimize("-finline-small-functions") %:pragma GCC optimize("-ftree-switch-conversion") %:pragma GCC optimize("-foptimize-sibling-calls") %:pragma GCC optimize("-fexpensive-optimizations") %:pragma GCC optimize("-funsafe-loop-optimizations") %:pragma GCC optimize("inline-functions-called-once") %:pragma GCC optimize("-fdelete-null-pointer-checks")当你把上面的优化都用到之后,你的程序就可以轻松 这道题了。最慢一个点只跑了 。
#include<bits/stdc++.h> #define N 50001 using namespace std; inline void rd(int &X){ X=0;char ch=0; while(!isdigit(ch))ch=getchar(); while( isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); } int n,m,p=1e9+7,i; long long l1,r1,ans; int f[N],g[N],x[N],y[N],l,r; inline void add(int x,int y){ for(;x;x-=x&-x) f[x]+=y,g[x]++; } inline void ask(int x){ for(l1=r1=0;x<=n;x+=x&-x) l1+=f[x],r1+=g[x]; } signed main() { rd(n);rd(m); for(i=1;i<=n;++i) rd(x[i]),rd(y[i]),ask(x[i]),add(x[i],y[i]),ans+=l1+r1*y[i]; while(m--) { rd(l);rd(r); if(l>r) swap(l,r); i=l+1; while(i<r) { if(x[i]>x[l]) ans+=y[i]+y[l]; if(x[i]<x[r]) ans+=y[i]+y[r]; if(x[i]<x[l]) ans-=y[i]+y[l]; if(x[i]>x[r]) ans-=y[i]+y[r]; ++i; } if(x[l]>x[r]) ans-=y[l]+y[r]; if(x[l]<x[r]) ans+=y[l]+y[r]; swap(x[l],x[r]);swap(y[l],y[r]); printf("%lld\n",ans=(ans%p+p)%p); } }后记:
暴力过数据结构题,你并不会收获什么,
只能获得成就感。所以有时候还是需要自己手敲代码的,这片题解仅供大家娱乐和参考。不过,反正快乐就行了呗(逃~
- 1
信息
- ID
- 1406
- 时间
- 5000ms
- 内存
- 250MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者