QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#85897 | #5500. Bars | chenxinyang2006 | AC ✓ | 373ms | 9804kb | C++14 | 2.0kb | 2023-03-08 20:51:59 | 2023-03-08 20:52:01 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define mem(a,b) memset(a,b,sizeof(a))
#define mpy(a,b) memcpy(a,b,sizeof(b))
#define dbg(...) cerr<<"#"<<__LINE__<<": "<<__VA_ARGS__<<endl
#define Fi(s) freopen(s,"r",stdin)
#define Fo(s) freopen(s,"w",stdout)
#define Fio(s) Fi(s".in"),Fo(s".out")
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;
template <class T>
void chkmax(T &x,T y){
if(x < y) x = y;
}
template <class T>
void chkmin(T &x,T y){
if(x > y) x = y;
}
inline int popcnt(int x){
return __builtin_popcount(x);
}
inline int ctz(int x){
return __builtin_ctz(x);
}
/*template <class T,class U>
inline void add(T &x,U y){
x += y;
if(x >= mod) x -= mod;
}
template <class T,class U>
inline void sub(T &x,U y){
x -= y;
if(x < 0) x += mod;
}
ll power(ll p,int k = mod - 2){
ll ans = 1;
while(k){
if(k % 2 == 1) ans = ans * p % mod;
p = p * p % mod;
k /= 2;
}
return ans;
}*/
int T,n;
ll a[500005];
int frp[500005];
int check(int i,int j,int k){
return (a[j] - a[i]) * (k - j) < (a[k] - a[j]) * (j - i);
}
vector <int> sta;
void solve(){
scanf("%d",&n);
rep(i,1,n) scanf("%lld",&a[i]);
sta.clear();
fill(frp + 1,frp + n + 1,0);
rep(i,1,n){
while(SZ(sta) >= 2 && check(sta[SZ(sta) - 2],sta[SZ(sta) - 1],i)) sta.pop_back();
sta.eb(i);
}
for(int pos:sta) frp[pos] = 1;
int lst = 0;
ll ans = 0;
rep(i,1,n){
if(lst) ans += a[lst];
if(frp[i]) lst = i;
}
lst = n + 1;
per(i,n,1){
if(lst != n + 1) ans += a[lst];
if(frp[i]) lst = i;
}
printf("%lld\n",ans);
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 3832kb
input:
2 4 5 2 2 6 5 1 5 4 4 1
output:
33 29
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 365ms
memory: 4020kb
input:
10000 4 5 2 2 6 5 1 5 4 4 1 197 763787596 15221694 898228999 187472305 466351873 822742732 437754202 800092772 843092246 915675776 166265020 346340615 796714085 497548541 182089610 64356048 363276768 181268733 257949015 236568898 752096761 928725929 443146784 114577469 833053207 38120723 14891030 41...
output:
33 29 382465638565 663641330002 550288673161 458946673513 296420749955 875760099157 632854843886 586309163102 225238173690 716890380495 466644027129 283505446030 585094154153 201707398762 336548832140 483300272586 606382970973 587469399170 408018096564 827347820764 975377092201 925120038848 26408806...
result:
ok 10000 lines
Test #3:
score: 0
Accepted
time: 334ms
memory: 9408kb
input:
6 500000 287001636 204980186 997392401 188445265 873977784 672984447 520446063 460936121 420229946 413937980 95267858 869951831 87353679 843288346 375704325 376217775 66621398 502675506 854835633 99408891 880520553 944446461 690146628 632137514 179514334 551490018 981073461 196185611 719601446 93667...
output:
999978185027008 499999063998982 999946405821678 999970304287364 499999737998030 999979204653771
result:
ok 6 lines
Test #4:
score: 0
Accepted
time: 348ms
memory: 9436kb
input:
6 500000 669619127 356830845 494606145 526755381 169647973 602343819 658032437 326960015 207942215 173060393 217232953 314912605 366676785 510103533 489446303 121223259 374781515 484954847 134957195 400053837 122117455 627813351 583524019 624468283 613073257 263488687 242182189 527854337 554306009 1...
output:
953660650057664 883167999492927 499223754839723 667315106896885 904445177106028 879334018232172
result:
ok 6 lines
Test #5:
score: 0
Accepted
time: 373ms
memory: 9804kb
input:
6 500000 12403960 2930024 1808469 4773510 8417429 6369605 2751412 4062450 9895452 9966727 11476617 4854207 2807239 9516332 5730691 731629 2368916 1351133 1435333 6860794 5460899 2506776 7936802 12585522 8631641 3397564 316192 11362360 10913499 5967508 7437490 12648666 5703570 637890 7908197 361480 8...
output:
667267911235251 678790984141243 666630987914525 671493601773996 717382005630376 667971386351316
result:
ok 6 lines