提出 #66901926
ソースコード 拡げる
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
const int m=1e5;
typedef long long ll;
int n; ll c,d;
ll a[N];
ll sum;
struct segtree{
#define maxx N*4
#define ls x<<1
#define rs x<<1|1
ll mn[maxx],mx[maxx],add[maxx],cov[maxx];
ll sum[maxx]; int len[maxx];
void push_up(int x) {
mn[x]=min(mn[ls],mn[rs]);
mx[x]=max(mx[ls],mx[rs]);
sum[x]=sum[ls]+sum[rs];
}
void build(int x,int l,int r) {
len[x]=r-l+1;
if(l==r) return;
int mid=(l+r)>>1;
build(ls,l,mid); build(rs,mid+1,r);
}
void cover(int x,ll w) {
add[x]=0; cov[x]=w;
mn[x]=mx[x]=w;
sum[x]=1ll*len[x]*w;
}
void adding(int x,ll w) {
add[x]+=w;
mn[x]+=w; mx[x]+=w;
sum[x]+=1ll*len[x]*w;
}
void push_down(int x) {
if(cov[x]) {
cover(ls,cov[x]);
cover(rs,cov[x]);
cov[x]=0;
}
if(add[x]) {
adding(ls,add[x]);
adding(rs,add[x]);
add[x]=0;
}
}
void updateAdd(int x,int l,int r,int a,int b,ll w) {
if(l>=a&&r<=b) {
adding(x,w);
return;
}
push_down(x);
int mid=(l+r)>>1;
if(mid>=a) updateAdd(ls,l,mid,a,b,w);
if(mid+1<=b) updateAdd(rs,mid+1,r,a,b,w);
push_up(x);
}
void updateCover(int x,int l,int r,int a,int b,ll w) {
if(l>=a&&r<=b) {
cover(x,w);
return;
}
push_down(x);
int mid=(l+r)>>1;
if(mid>=a) updateCover(ls,l,mid,a,b,w);
if(mid+1<=b) updateCover(rs,mid+1,r,a,b,w);
push_up(x);
}
int queryMin(int x,int l,int r,ll w) {
if(l==r) {
if(mn[x]>=w) return l;
return m+1;
}
push_down(x);
int mid=(l+r)>>1;
if(mx[ls]>=w) return queryMin(ls,l,mid,w);
else return queryMin(rs,mid+1,r,w);
}
int queryMax(int x,int l,int r,ll w) {
if(l==r) {
if(mx[x]<=w) return l;
return -m;
}
push_down(x);
int mid=(l+r)>>1;
if(mn[rs]<=w) return queryMax(rs,mid+1,r,w);
else return queryMax(ls,l,mid,w);
}
ll query(int x,int l,int r,int a) {
if(l==r) return mx[x];
push_down(x);
int mid=(l+r)>>1;
if(mid>=a) return query(ls,l,mid,a);
else return query(rs,mid+1,r,a);
}
ll querySum(int x,int l,int r,int a,int b) {
if(l>=a&&r<=b) return sum[x];
push_down(x);
int mid=(l+r)>>1;
ll ans=0;
if(mid>=a) ans+=querySum(ls,l,mid,a,b);
if(mid+1<=b) ans+=querySum(rs,mid+1,r,a,b);
return ans;
}
}t;
int lpos[N],rpos[N];
void debugger() {
printf("--%lld\n",sum);
for(int i=-m+1;i<=m;i++) printf("%lld ", t.query(1,-m,m,i));
puts("");
}
int ans[N];
int main() {
t.build(1,-m,m);
scanf("%d%lld%lld",&n,&c,&d);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
ll pos=-m;
sum=-pos*c;
t.updateCover(1,-m,m,-m,0,-c);
t.updateCover(1,-m,m,1,m,c);
// debugger();
for(int i=1;i<=n;i++) {
sum+=abs(pos-a[i])*d;
//debugger();
int lc=t.queryMax(1,-m,m,-c);
int rc=t.queryMin(1,-m,m,c);
if(lc>-m) {
ll sm=t.querySum(1,-m,m,-m+1,lc);
sum-=(-sm-1ll*c*(m+lc));
t.updateCover(1,-m,m,-m,lc,-c);
}
if(rc!=m+1) t.updateCover(1,-m,m,rc,m,c);
lpos[i]=lc; rpos[i]=rc-1;
t.updateAdd(1,-m,m,-m,a[i],-d);
if(a[i]+1<=m) t.updateAdd(1,-m,m,a[i]+1,m,d);
//debugger();
}
for(int i=-m+1;i<=m;i++) {
ll w=t.query(1,-m,m,i);
if(w<=0) sum+=w,pos=i;
else break;
}
printf("%lld\n",sum);
ans[n]=pos;
for(int i=n;i>=2;i--) {
pos=min(pos,(ll)rpos[i]);
pos=max(pos,(ll)lpos[i]);
ans[i-1]=pos;
}
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
}
提出情報
コンパイルエラー
Main.cpp: In function ‘int main()’:
Main.cpp:118:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
118 | scanf("%d%lld%lld",&n,&c,&d);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:119:32: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
119 | for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
| ~~~~~^~~~~~~~~~~~~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
625 / 625 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample00.txt, sample01.txt, sample02.txt |
| All |
sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt, testcase44.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| sample00.txt |
AC |
11 ms |
16220 KiB |
| sample01.txt |
AC |
12 ms |
16220 KiB |
| sample02.txt |
AC |
12 ms |
16280 KiB |
| testcase00.txt |
AC |
283 ms |
29256 KiB |
| testcase01.txt |
AC |
360 ms |
30252 KiB |
| testcase02.txt |
AC |
245 ms |
28736 KiB |
| testcase03.txt |
AC |
361 ms |
30064 KiB |
| testcase04.txt |
AC |
246 ms |
28944 KiB |
| testcase05.txt |
AC |
358 ms |
30256 KiB |
| testcase06.txt |
AC |
306 ms |
29732 KiB |
| testcase07.txt |
AC |
354 ms |
30168 KiB |
| testcase08.txt |
AC |
271 ms |
29176 KiB |
| testcase09.txt |
AC |
374 ms |
30160 KiB |
| testcase10.txt |
AC |
228 ms |
28672 KiB |
| testcase11.txt |
AC |
370 ms |
30288 KiB |
| testcase12.txt |
AC |
282 ms |
29380 KiB |
| testcase13.txt |
AC |
371 ms |
30140 KiB |
| testcase14.txt |
AC |
260 ms |
29280 KiB |
| testcase15.txt |
AC |
354 ms |
30388 KiB |
| testcase16.txt |
AC |
232 ms |
28796 KiB |
| testcase17.txt |
AC |
370 ms |
30132 KiB |
| testcase18.txt |
AC |
275 ms |
29236 KiB |
| testcase19.txt |
AC |
368 ms |
30156 KiB |
| testcase20.txt |
AC |
351 ms |
30412 KiB |
| testcase21.txt |
AC |
219 ms |
30264 KiB |
| testcase22.txt |
AC |
219 ms |
30184 KiB |
| testcase23.txt |
AC |
261 ms |
30264 KiB |
| testcase24.txt |
AC |
305 ms |
30176 KiB |
| testcase25.txt |
AC |
211 ms |
30380 KiB |
| testcase26.txt |
AC |
212 ms |
30336 KiB |
| testcase27.txt |
AC |
219 ms |
30140 KiB |
| testcase28.txt |
AC |
305 ms |
30404 KiB |
| testcase29.txt |
AC |
221 ms |
30256 KiB |
| testcase30.txt |
AC |
223 ms |
30264 KiB |
| testcase31.txt |
AC |
265 ms |
30164 KiB |
| testcase32.txt |
AC |
356 ms |
30268 KiB |
| testcase33.txt |
AC |
220 ms |
30264 KiB |
| testcase34.txt |
AC |
218 ms |
30376 KiB |
| testcase35.txt |
AC |
263 ms |
30408 KiB |
| testcase36.txt |
AC |
303 ms |
30132 KiB |
| testcase37.txt |
AC |
224 ms |
30140 KiB |
| testcase38.txt |
AC |
221 ms |
30268 KiB |
| testcase39.txt |
AC |
266 ms |
30308 KiB |
| testcase40.txt |
AC |
11 ms |
16284 KiB |
| testcase41.txt |
AC |
72 ms |
18404 KiB |
| testcase42.txt |
AC |
130 ms |
30224 KiB |
| testcase43.txt |
AC |
108 ms |
18148 KiB |
| testcase44.txt |
AC |
125 ms |
28328 KiB |