QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#840320 | #8712. Flooding Wall | zhassyn# | 20 | 254ms | 23124kb | C++20 | 4.6kb | 2025-01-02 17:05:28 | 2025-01-02 17:05:31 |
Judging History
answer
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 5 * 1e5 + 100, M = 4096 + 10, len = 315, inf = 1e18;
const ll mod = 1e9 + 7;
ll um(ll a, ll b){
return (1LL * a * b) % mod;
}
ll subr(ll a, ll b){
return ((1LL * a - b) % mod + mod) % mod;
}
ll a[N], b[N], num[N], n, p[N];
void subtask1(){
ll ans = 0;
for(ll mask = 0; mask < (1 << n); mask++){
for(ll dig = 0; dig < n; dig++){
if((mask & (1 << dig)) > 0) num[dig] = a[dig];
else num[dig] = b[dig];
}
vector <pll> vec;
// for(ll i = 0; i < n; i++){
// cout << num[i] << " ";
// }
// cout << endl;
for(ll i = 0; i < n; i++){
ll res = 0, last = -1, cnt = 0;
while((ll)vec.size() != 0){
pll v = vec.back();
if(v.F <= num[i]){
cnt += v.S;
last = v.F;
res += um(num[i] - v.F, v.S);
vec.pop_back();
} else break;
}
if((ll)vec.size() != 0) ans += res;
else ans = ans + subr(res, um(cnt, num[i] - last));
ans %= mod;
vec.pb({num[i], cnt + 1});
}
//cout << ans << " HERE\n";
}
cout << ans;
}
// pll sf[N], pr[N];
// ll ls[N], rs[N], fen[N], was[N];
// bool wb[N];
// void upd(ll i, ll delta){
// for(; i < N; i = (i | (i+ 1))){
// fen[i] += delta;
// }
// }
// ll get(ll r){
// ll res = 0;
// for(; r >= 0; r = (r & (r + 1)) - 1){
// res += fen[r];
// }
// return res;
// }
// void subtask2(){
// ll ans = 0;
// for(ll i = 0; i < n; i++){
// //cout << i << " INDEX\n";
// set <pll> mn;
// // This shit is not for me
// for(ll j = 1; j <= 1000; j++){
// was[j] = 0;
// wb[j] = 0;
// }
// for(ll j = i + 1; j < n; j++){
// mn.insert({-b[j], j});
// upd(a[j], 1);
// }
// for(ll j = i + 1; j < n; j++){
// mn.erase({-b[j], j});
// upd(a[j], -1);
// ll mini = 0;
// if((int)mn.size() != 0) mini = -mn.begin()->F;
// if(mini > a[j]) sf[j].F = 0;
// else sf[j].F = p[get(a[j]) - was[a[j]]];
//
// if(mini > b[j] || wb[b[j]]) sf[j].S = 0;
// else sf[j].S = p[get(b[j]) - was[b[j]]];
// //cout << sf[j].F << " "<< sf[j].S << endl;
// upd(a[j], 1);
// was[a[j]]++;
// wb[b[j]] = 1;
// mn.insert({-b[j], j});
// }
// for(ll j = i + 1; j < n; j++){
// rs[a[j]] += sf[j].F;
// rs[a[j]] %= mod;
// rs[b[j]] += sf[j].S;
// rs[b[j]] %= mod;
//
// upd(a[j], -1);
// }
//
// mn.clear();
// // bless you/ work please
// for(ll j = 1; j <= 1000; j++){
// was[j] = 0;
// wb[j] = 0;
// }
// for(ll j = i - 1; j >= 0; j--){
// mn.insert({-b[j], j});
// upd(a[j], 1);
// }
// for(ll j = i - 1; j >= 0; j--){
// mn.erase({-b[j], j});
// upd(a[j], -1);
// ll mini = 0;
// if((int)mn.size() != 0) mini = -mn.begin()->F;
// if(mini > a[j]) pr[j].F = 0;
// else pr[j].F = p[get(a[j]) - was[a[j]]];
//
// if(mini > b[j] || wb[b[j]]) pr[j].S = 0;
// else pr[j].S = p[get(b[j]) - was[b[j]]];
// //cout << pr[j].F << " "<< pr[j].S << endl;
// upd(a[j], 1);
// was[a[j]]++;
// wb[b[j]] = true;
// mn.insert({-b[j], j});
// }
// for(ll j = i - 1; j >= 0; j--){
// ls[a[j]] += pr[j].F;
// ls[a[j]] %= mod;
// ls[b[j]] += pr[j].S;
// ls[b[j]] %= mod;
//
// upd(a[j], -1);
// }
// for(ll j = 1; j <= 1000; j++){
// for(ll k = 1; k <= 1000; k++){
// if(a[i] < min(k, j)) ans += um(min(k, j) - a[i], um(rs[j], ls[k]));
// if(b[i] < min(k, j)) ans += um(min(k, j) - b[i], um(rs[j], ls[k]));
// ans %= mod;
// }
// }
// for(ll j = 1; j <= 1000; j++){
// rs[j] = ls[j] = 0;
// }
// //cout << ans << " RESULT\n";
// }
// cout << ans;
// }
ll pref[N];
void subtask5(){
ll cnt = 0, sm = 1, ans = 0;
for(ll i = 1; i <= n; i++){
cnt++;
pref[i] = pref[i - 1] + um(cnt, sm);
pref[i] %= mod;
sm = um(sm, 2LL);
}
//cout << endl;
for(ll i = 1; i <= n-2; i++){
ans += pref[i];
ans %= mod;
}
cout << ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
p[0] = 1;
ll mx = 0;
for(ll i = 1; i <= n; i++){
p[i] = um(p[i - 1], 2LL);
}
for(ll i = 0; i < n; i++){
cin >> a[i];
}
for(ll i = 0; i < n; i++){
cin >> b[i];
if(b[i] > a[i]) swap(a[i], b[i]);
mx = max(mx, a[i]);
}
if(n <= 20){
subtask1();
return 0;
}
if(mx <= 2){
subtask5();
return 0;
}
//subtask2();
return 0;
}
詳細信息
Subtask #1:
score: 8
Accepted
Test #1:
score: 8
Accepted
time: 0ms
memory: 11784kb
input:
4 1 1 1 1 2 2 2 2
output:
6
result:
ok single line: '6'
Test #2:
score: 8
Accepted
time: 2ms
memory: 11932kb
input:
10 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
output:
21116
result:
ok single line: '21116'
Test #3:
score: 8
Accepted
time: 2ms
memory: 11712kb
input:
1 1 2
output:
0
result:
ok single line: '0'
Test #4:
score: 8
Accepted
time: 1ms
memory: 12008kb
input:
2 1 1 2 2
output:
0
result:
ok single line: '0'
Test #5:
score: 8
Accepted
time: 1ms
memory: 12000kb
input:
3 1 1 1 2 2 2
output:
1
result:
ok single line: '1'
Test #6:
score: 8
Accepted
time: 0ms
memory: 11968kb
input:
3 1 1 1 3 2 3
output:
3
result:
ok single line: '3'
Test #7:
score: 8
Accepted
time: 0ms
memory: 11800kb
input:
3 2 1 1 3 2 3
output:
4
result:
ok single line: '4'
Test #8:
score: 8
Accepted
time: 1ms
memory: 12012kb
input:
3 1 1 2 3 2 3
output:
4
result:
ok single line: '4'
Test #9:
score: 8
Accepted
time: 0ms
memory: 12000kb
input:
4 1 1 2 2 2 2 1 1
output:
6
result:
ok single line: '6'
Test #10:
score: 8
Accepted
time: 1ms
memory: 12016kb
input:
3 1 4 4 3 1 1
output:
2
result:
ok single line: '2'
Test #11:
score: 8
Accepted
time: 240ms
memory: 11728kb
input:
20 801072306 297281669 94099424 745640358 822582129 579751930 776707816 425952653 529794053 256263083 615445445 401366545 990263003 967996508 788867983 916880116 837997768 346996508 623409388 122077161 141734988 448434751 822901346 825591177 388082644 468025968 260356829 1164654 537396602 730502935 ...
output:
840988190
result:
ok single line: '840988190'
Test #12:
score: 8
Accepted
time: 8ms
memory: 11796kb
input:
15 792312195 195812430 401437979 703756992 502275277 612055402 556065888 470806179 556125857 640437896 240743729 861383776 500299988 911972088 161499505 167335533 694282920 379241393 144223073 973249939 83979787 962250505 359871412 130233016 655843497 928153117 542969567 974346871 369758881 962874102
output:
617169726
result:
ok single line: '617169726'
Test #13:
score: 8
Accepted
time: 251ms
memory: 11728kb
input:
20 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 2 1 2 1 2 2 1 2 2 2 1 1 1 1 1 2 2 2 2 1 1 2 1 2
output:
8388630
result:
ok single line: '8388630'
Test #14:
score: 8
Accepted
time: 8ms
memory: 11944kb
input:
15 2 1 1 2 1 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 2 1 1 2
output:
180241
result:
ok single line: '180241'
Test #15:
score: 8
Accepted
time: 231ms
memory: 11712kb
input:
20 10 3 8 2 5 7 8 3 3 10 5 6 1 2 1 9 10 2 7 10 6 6 2 3 6 10 4 6 7 2 3 3 5 7 2 8 2 1 5 1
output:
78020608
result:
ok single line: '78020608'
Test #16:
score: 8
Accepted
time: 221ms
memory: 11712kb
input:
20 999999992 999999995 999999995 999999998 999999994 999999996 999999992 1000000000 1000000000 999999997 999999999 999999994 999999998 999999992 999999999 1000000000 999999993 999999999 999999996 999999998 999999998 999999998 999999996 999999993 999999996 999999997 1000000000 999999995 999999994 999...
output:
44474368
result:
ok single line: '44474368'
Test #17:
score: 8
Accepted
time: 228ms
memory: 11792kb
input:
20 999999996 10 6 5 4 1 7 9 5 10 1 4 6 3 10 5 3 10 4 999999997 999999997 4 10 7 5 6 2 2 2 7 2 7 3 5 7 1 8 9 2 1000000000
output:
701155847
result:
ok single line: '701155847'
Test #18:
score: 8
Accepted
time: 0ms
memory: 11716kb
input:
11 1 4 2 1 10 6 3 10 1 10 10 6 8 8 7 1 1 1 9 7 9 3
output:
56064
result:
ok single line: '56064'
Test #19:
score: 8
Accepted
time: 0ms
memory: 11792kb
input:
13 999999992 999999993 999999999 999999998 999999994 999999998 999999991 999999991 999999999 999999996 999999994 999999991 999999994 999999994 999999991 999999994 999999997 999999997 1000000000 999999996 999999993 999999992 999999992 999999992 999999998 999999991
output:
184256
result:
ok single line: '184256'
Test #20:
score: 8
Accepted
time: 28ms
memory: 11704kb
input:
17 1000000000 6 4 10 10 4 2 4 10 2 7 1 3 8 4 1 999999996 999999997 3 6 4 3 6 5 10 5 7 6 10 10 7 10 3 999999997
output:
968149511
result:
ok single line: '968149511'
Test #21:
score: 8
Accepted
time: 254ms
memory: 11784kb
input:
20 5 900000001 800000002 700000003 600000004 500000005 10 5 1 100000009 10 3 2 300000007 8 500000005 3 3 800000002 2 1000000000 3 6 6 10 4 400000006 300000007 200000008 1 1 100000009 200000008 5 400000006 4 600000004 700000003 2 900000001
output:
681216662
result:
ok single line: '681216662'
Test #22:
score: 8
Accepted
time: 119ms
memory: 11720kb
input:
19 1000000000 2 777777778 7 555555556 444444445 333333334 222222223 6 4 111111112 222222223 8 444444445 555555556 6 10 888888889 1000000000 3 888888889 3 666666667 6 8 7 10 111111112 1 5 4 333333334 3 4 666666667 777777778 7 4
output:
608096464
result:
ok single line: '608096464'
Subtask #2:
score: 0
Wrong Answer
Test #23:
score: 0
Wrong Answer
time: 2ms
memory: 11716kb
input:
100 948 425 211 688 416 81 356 602 712 954 117 522 797 75 281 491 662 669 78 156 939 526 929 937 916 619 166 777 48 898 449 278 298 714 668 755 679 38 389 602 195 135 672 833 655 541 473 27 596 274 351 353 598 993 837 246 950 99 179 751 481 843 550 195 964 279 806 82 330 599 124 756 649 838 513 625 ...
output:
result:
wrong answer 1st lines differ - expected: '164439470', found: ''
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%
Subtask #5:
score: 12
Accepted
Test #57:
score: 12
Accepted
time: 35ms
memory: 23124kb
input:
500000 1 1 1 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 2 1 2 2 1 1 2 2 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 2 2 1 1 1 2 2 2 1 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1...
output:
869044223
result:
ok single line: '869044223'
Test #58:
score: 12
Accepted
time: 31ms
memory: 21008kb
input:
499993 1 1 2 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 1 1 1 2 2 2 1 1 2 2 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 1 2 1 1 1 2 2 1 1 2 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 1 2 1 1 2 1 2 2 1 2 2 2 2 2 1 2 2 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 2 1 1 1...
output:
480826834
result:
ok single line: '480826834'
Test #59:
score: 12
Accepted
time: 38ms
memory: 21032kb
input:
500000 2 2 1 1 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 1 2 2...
output:
869044223
result:
ok single line: '869044223'
Test #60:
score: 12
Accepted
time: 39ms
memory: 21080kb
input:
499999 2 1 2 2 1 2 1 1 2 1 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 2 1 1 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 1 2 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 1 2 1 2 1 2 2 2 1 1...
output:
192864306
result:
ok single line: '192864306'
Subtask #6:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%