QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#403758 | #8229. 栈 | flying# | 0 | 225ms | 32768kb | C++14 | 2.9kb | 2024-05-02 18:32:25 | 2024-05-02 18:32:25 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
struct node
{
int l,r,suml,sumr,minsum,cnt,ans;
};
struct Add
{
int pos,suml,sumr,ans;
};
vector <int> que[N];
vector <Add> add[N];
node res[N*4];
int val[N];
bool isque[N];
int calccnt(int rt,int val)
{
if(res[rt].l==res[rt].r)
{
if(res[rt].sumr<=0)
return 0;
return max(0ll,min(res[rt].sumr,val)-res[rt].suml+1);
}
if(res[rt*2+1].minsum+res[rt*2].sumr<=val)
return res[rt].cnt-res[rt*2+1].cnt+calccnt(rt*2+1,val-res[rt*2].sumr);
return calccnt(rt*2,val);
}
int calcans(int rt,int val)
{
if(res[rt].l==res[rt].r)
{
if(res[rt].sumr<=0)
return 0;
return max(0ll,min(res[rt].sumr,val)-res[rt].suml+1)*(res[rt].ans/(res[rt].sumr-res[rt].suml+1));
}
if(res[rt*2+1].minsum<=val)
return res[rt].ans-res[rt*2+1].ans+calcans(rt*2+1,val);
return calcans(rt*2,val);
}
node pushup(int rt,node r)
{
node ans;
ans.l=res[rt].l, ans.r=r.r;
ans.suml=res[rt].suml, ans.sumr=r.sumr;
ans.minsum=min(res[rt].minsum,res[rt].sumr+r.minsum);
ans.cnt=r.cnt+calccnt(rt,res[rt].sumr+r.minsum);
ans.ans=r.ans+calcans(rt,res[rt].sumr+r.minsum);
return ans;
}
void update(int rt,int pos,int suml,int sumr,int ans)
{
if(res[rt].l==res[rt].r)
{
res[rt].suml=suml, res[rt].sumr=sumr, res[rt].ans=ans;
if(res[rt].sumr<=0)
res[rt].cnt=0;
else
res[rt].cnt=res[rt].sumr,-res[rt].suml+1;
return;
}
int mid=(res[rt].l+res[rt].r)/2;
if(pos<=mid)
update(rt*2,pos,suml,sumr,ans);
else
update(rt*2+1,pos,suml,sumr,ans);
res[rt]=pushup(rt*2,res[rt*2+1]);
}
void build(int rt,int l,int r)
{
res[rt].l=l, res[rt].r=r;
if(l==r)
return;
int mid=(l+r)/2;
build(rt*2,l,mid);
build(rt*2+1,mid+1,r);
}
void query(int rt,int l,int r,node& now)
{
if(l<=res[rt].l && res[rt].r<=r)
{
if(res[rt].r==r)
now=res[rt];
else
now=pushup(rt,now);
return;
}
int mid=(res[rt].l+res[rt].r)/2;
if(mid+1<=r)
query(rt*2+1,l,r,now);
if(l<=mid)
query(rt*2,l,r,now);
}
signed main()
{
int n,m;
cin >> n >> m;
for(int i=1;i<=m;i++)
{
int op;
scanf("%lld",&op);
if(op==1)
{
int l,r,x,y;
scanf("%lld %lld %lld %lld",&l,&r,&x,&y);
add[l].push_back((Add){i,1,x,x*y});
add[r+1].push_back((Add){i,0,0,0});
}
else if(op==2)
{
int l,r,x;
scanf("%lld %lld %lld",&l,&r,&x);
add[l].push_back((Add){i,-1,-x,0});
add[r+1].push_back((Add){i,0,0,0});
}
else
{
int k,p,q;
scanf("%lld %lld %lld",&k,&p,&q);
que[k].push_back(i);
}
}
build(1,1,n);
for(int i=1;i<=n;i++)
{
for(auto x:add[i])
update(1,x.pos,x.suml,x.sumr,x.ans);
for(auto x:que[i])
{
node ans;
query(1,1,x,ans);
val[x]=ans.ans;
isque[x]=true;
}
}
for(int i=1;i<=m;i++)
if(isque[i])
printf("%lld\n",val[i]);
return 0;
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 8ms
memory: 12588kb
input:
4907 4910 2 763 3330 1 3 307 1 1 1 2262 3430 22699 89397 1 1915 4000 51541 67587 2 212 2990 9763 2 1086 2162 1 2 1813 4496 16760 1 51 2796 68005 99390 1 1267 1519 74236 66178 3 1768 23808 54314 2 900 4122 27758 3 3287 17350 28989 2 3277 4024 3633 2 444 4866 1 2 353 4219 1061 1 987 3141 99906 17320 2...
output:
0 6759016950 0 328410220 3868951467 354681012 354681012 354681012 3454899900 354681012 0 0 0 3868951467 930356502 4825972171 2410632174 7823957630 0 7605940517 7220289528 1081562490 4502141070 1081562490 7725540960 0 0 0 7756309360 4419968046 4140997877 0 2307175899 2307175899 0 0 0 0 2190767040 219...
result:
wrong answer 2nd numbers differ - expected: '3032090730', found: '6759016950'
Subtask #2:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 191ms
memory: 32768kb
input:
99999 99998 1 5026 18575 27178 90423 3 30623 1 1 3 76936 1 1 1 77021 95683 84664 24734 1 46085 74886 40512 11266 3 5048 8594 22468 1 53318 77721 97151 70784 1 70645 91192 37556 13013 1 56752 56940 91812 62887 1 7928 34576 87339 69404 3 74875 32807 100970 3 22338 17221 25771 3 21421 20602 57957 3 717...
output:
0 0 2457516294 7821860804 6061675956 6061675956 7821860804 8519192250 456408192 6061675956 6061675956 10318649388 23648590281 17174794326 15463358481 40383014870 8621531033 19030351911 37436785215 25442285198 54101779334 1799457138 50423131310 28896433183 32968951471 26662685122 10496552948 87827624...
result:
wrong answer 3rd numbers differ - expected: '1254619125', found: '2457516294'
Subtask #3:
score: 0
Wrong Answer
Test #12:
score: 0
Wrong Answer
time: 218ms
memory: 31772kb
input:
100000 99993 1 47773 70467 16065 1 2 52349 78446 2304 3 40821 1 1 1 40216 93069 78144 1 1 41089 43671 76025 1 2 35263 68629 31066 3 79881 13534 57327 3 5556 1 1 2 21962 38192 1 1 664 58116 9417 1 3 28089 6039 7989 2 88500 90302 9946 3 63215 49410 60770 2 11069 89527 57581 2 70303 97603 12363 1 3420 ...
output:
0 78144 0 9417 47078 0 0 98785 0 0 84295 1818 10359 88505 88505 0 124369 0 0 84295 0 0 0 41669 0 253056 167044 57781 204714 67036 41845 291861 108881 757810 108881 76791 177430 0 177430 230269 0 0 88269 0 0 51149 51149 0 0 0 71588 0 0 0 0 4378 159 0 0 0 0 0 40449 0 74358 40449 204786 153148 0 46069 ...
result:
wrong answer 2nd numbers differ - expected: '43794', found: '78144'
Subtask #4:
score: 0
Wrong Answer
Test #17:
score: 0
Wrong Answer
time: 225ms
memory: 31796kb
input:
99999 99996 3 77889 1 10000000000 1 6316 86327 89644 386 3 9260 1 10000000000 2 2603 47234 69717 2 20260 73011 19290 2 62477 81233 26127 1 50140 68508 37004 98794 2 14449 22788 16063 1 43860 84932 50375 21777 1 67345 94584 28202 66610 2 661 68654 1 1 14411 94422 82738 61196 1 16563 94416 4920 38408 ...
output:
0 34602584 0 0 23315121015 0 0 1902514434 1902514434 142201548 1902514434 15794375094 0 4192446657 14270425784 132317919 0 1385452703 1385452703 209520954 173054178 209520954 0 6843261316 38004579 0 38004579 7942101753 6144703384 6542442770 8463978444 4496343819 11161804173 0 10890418194 479258961 8...
result:
wrong answer 5th numbers differ - expected: '27739639583', found: '23315121015'
Subtask #5:
score: 0
Skipped
Dependency #1:
0%