我又双叒叕断更辣!
其实前面 天都差点更了。
上午
考试。
不过这个考试还算是正常的考试,因为分数也是十分正常。
然而,我的 T1 因为没开 long long 爆了 分。
T1
如上文所说:因为没开 long long 爆了 分。
但是赛时代码是这样的:
#include<bits/extc++.h>#define ll long long// #define LOCALusing namespace std;const int maxn = 1.5e5 + 5;int n,q;ll a[maxn],b[maxn];ll pre[maxn],sum;signed main(){ #ifdef LOCAL freopen("perm.in","r",stdin); freopen("perm.out","w",stdout); #endif ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = a[i]; } cin >> q; sort(b + 1,b + n + 1); for (int i = 1; i <= n; i++) { sum += b[i] * i; pre[i] = pre[i - 1] + b[i]; } int x,y; while (q--) { cin >> x >> y; if (a[x] < y) { int l = lower_bound(b + 1,b + n + 1,a[x]) - b; int r = lower_bound(b + 1,b + n + 1,y) - b - 1; ll tmp = sum - l * a[x] + r * y; tmp -= pre[r] - pre[l]; cout << tmp << endl; } else if (a[x] > y) { int l = lower_bound(b + 1,b + n + 1,y) - b; int r = lower_bound(b + 1,b + n + 1,a[x]) - b; ll tmp = sum - r * a[x] + l * y; tmp += pre[r - 1] - pre[l - 1]; cout << tmp << endl; } else cout << sum << endl; } #ifdef LOCAL fclose(stdout); cout << clock(); #endif return 0;}改正后的代码是这样的:
#include<bits/extc++.h>#define int long long// #define LOCALusing namespace std;const int maxn = 1.5e5 + 5;int n,q;int a[maxn],b[maxn];int pre[maxn],sum;signed main(){ #ifdef LOCAL freopen("perm.in","r",stdin); freopen("perm.out","w",stdout); #endif ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = a[i]; } cin >> q; sort(b + 1,b + n + 1); for (int i = 1; i <= n; i++) { sum += b[i] * i; pre[i] = pre[i - 1] + b[i]; } int x,y; while (q--) { cin >> x >> y; if (a[x] < y) { int l = lower_bound(b + 1,b + n + 1,a[x]) - b; int r = lower_bound(b + 1,b + n + 1,y) - b - 1; int tmp = sum - l * a[x] + r * y; tmp -= pre[r] - pre[l]; cout << tmp << endl; } else if (a[x] > y) { int l = lower_bound(b + 1,b + n + 1,y) - b; int r = lower_bound(b + 1,b + n + 1,a[x]) - b; int tmp = sum - r * a[x] + l * y; tmp += pre[r - 1] - pre[l - 1]; cout << tmp << endl; } else cout << sum << endl; } #ifdef LOCAL fclose(stdout); cout << clock(); #endif return 0;}咱就是说:这里面也没有什么该开的没开是吧?一个 数组,一个 数组,都开了,还有一个 和 都开了啊,为何呢??
大概是那个 sum += b[i] * i; 没开导致吧?
T2
打了一个假作法,骗了 分。还不如不打呢
T3 & T4
赛时没看,赛后看了,挺简单的,但是赛时要想到还是有点难。
下午
改题。
T1
T1 也是十分简单,但是因为没开 long long 痛失 分。
我决定把 #define int long long 打到缺省源里
T2
T3
虽然马周大佬的做法很简单,但是我还是更喜欢题解的 set 做法
T4
虽然 kaka 的线段树十分好懂,但是我还是更喜欢哈希。
晚上
晚上,因为[NOIP2012 提高组] 开车旅行↗没改,于是又被祝老荣幸提名了一遍。但是一看题解,只能对着行数 的代码犯恶心。
但是对着那个又臭又长的代码调了一晚上,死因是没开 long long 。我简直是。。。
然后,和 long long 斗争到底的一天就这么结束了
才没有呢。
半夜
由于今天晚上有 edu ,所以我还得到学校待到十一二点。但是,xguagua 和 yzp 都回去了,就剩我一个人在机房凌乱。
希望这次能够多打几题,多涨点 rated 。
Thanks for reading!
