QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#403772 | #8229. 栈 | flying# | 24 | 284ms | 31504kb | C++14 | 3.0kb | 2024-05-02 18:42:17 | 2024-05-02 18:42:18 |
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+res[rt*2].sumr<=val)
return res[rt].ans-res[rt*2+1].ans+calcans(rt*2+1,val-res[rt*2].sumr);
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=res[rt].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, res[rt].minsum=min(suml,sumr);
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,m);
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: 2ms
memory: 9672kb
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 2503886004 2760518830 3868951467 354681012 846632703 354681012 10108364670 354681012 0 0 0 3868951467 988147924 3978452244 2410632174 7881749052 0 7605940517 7220289528 6289598490 4906605860 10331222926 7725540960 1630130496 1825192597 0 7756309360 12105053806 13390658313 1353121416 720...
result:
wrong answer 2nd numbers differ - expected: '3032090730', found: '6759016950'
Subtask #2:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 189ms
memory: 29272kb
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: 202ms
memory: 30236kb
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 60839 3258 3258 98785 30831 78413 148040 69435 177077 218068 185702 207689 337992 0 106367 84295 0 227540 89645 144375 60327 338557 394584 57781 307420 67036 41845 546969 108881 757810 108881 349849 419147 160862 354912 396070 31681 148050 88269 0 5240 495886 243577 412568 0 243576 52...
result:
wrong answer 2nd numbers differ - expected: '43794', found: '78144'
Subtask #4:
score: 24
Accepted
Test #17:
score: 24
Accepted
time: 210ms
memory: 30236kb
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 27739639583 1363823412 0 1902514434 1902514434 2147553884 1902514434 15794375094 0 4192446657 15797478185 13141921145 0 6351944090 5775183021 363222594 1995572111 2193350882 0 6843261316 5508935691 250667843 0 14181223499 7734049978 21958753162 12852564544 4496343819 15011219087 11331...
result:
ok 33196 numbers
Test #18:
score: 24
Accepted
time: 220ms
memory: 30228kb
input:
99993 100000 3 61460 1 10000000000 1 24890 92871 3803 26680 1 13860 37123 61687 5252 1 8370 24754 70468 14033 3 89253 1 10000000000 3 19857 1 10000000000 1 46250 80211 68621 64496 2 51133 69614 60852 1 6552 42728 61410 66775 3 16111 1 10000000000 3 48406 1 10000000000 2 46319 62460 3834 3 11455 1 10...
output:
0 101464040 1312857568 5413510318 4527244056 5089530194 4526096914 0 4475006240 7393292878 6354306906 5962661320 1073478334 14785061024 124598326 5273378126 3143834350 5315386486 567431731 3354264361 0 8452414800 16197376342 15594421332 7644906667 10259594309 15786872317 21575834611 25614641754 0 56...
result:
ok 33334 numbers
Test #19:
score: 24
Accepted
time: 257ms
memory: 30376kb
input:
99998 99996 3 40534 1 10000000000 1 89230 99016 8691 49307 1 73075 80610 27269 1760 1 80632 96125 13027 41376 1 55057 71990 82693 44377 2 11566 27301 1 2 23704 47061 1 1 67323 97867 14275 31136 1 11736 72566 78826 36301 3 70013 1 10000000000 1 23701 76122 6240 56626 2 71627 75885 1100 3 852 1 100000...
output:
0 6975596287 0 0 2144844585 6718561947 6718561947 2158130751 2917409114 3686398232 3317159253 1336852308 8373494196 2102154609 2709470190 1740124736 7659185913 1508488055 4242893725 8408091078 11875396012 18171183033 0 14595335642 18243076995 18521970659 18538979218 18538979218 20876408549 136521304...
result:
ok 33368 numbers
Test #20:
score: 24
Accepted
time: 250ms
memory: 30332kb
input:
99995 99996 3 45022 1 10000000000 2 3423 75909 1 1 54871 80611 9913 46243 2 12223 64484 1 1 12991 92385 39637 71608 3 20817 1 10000000000 3 14810 1 10000000000 3 85611 1 10000000000 3 34957 1 10000000000 3 22540 1 10000000000 2 11680 85376 4565 2 37283 97824 2191 3 84953 1 10000000000 3 56562 1 1000...
output:
0 2838326296 2838326296 2838326296 2838326296 2838326296 2354542648 2812903264 2631018944 2518569019 2681433168 2439582449 0 2681433168 2596475577 2439582449 0 7076261394 4449272647 15245942497 17667326760 15245942497 17667326760 17015058013 16860972874 42913399354 6034264601 96968820 12777724000 15...
result:
ok 33362 numbers
Test #21:
score: 24
Accepted
time: 284ms
memory: 31504kb
input:
99997 99996 3 68591 1 10000000000 2 11039 97222 1 1 34581 58556 66216 49214 1 42922 79247 32694 462 2 53032 58124 10301 3 34753 1 10000000000 1 22670 52566 70087 14019 3 55338 1 10000000000 3 30269 1 10000000000 1 4720 84384 20451 10356 3 11823 1 10000000000 1 37895 41892 96036 45498 2 19158 57043 7...
output:
0 3258754224 3269099790 982549653 211790556 1278106321 13591686831 9174283336 13929158983 10709860696 11476736634 24202776273 22066287959 23834159039 19695058244 28492871831 46736921586 859941225 5996946536 32463961710 31748786358 726580728 43724564767 39567498070 43724564767 57942980296 41944974287...
result:
ok 16689 numbers
Subtask #5:
score: 0
Skipped
Dependency #1:
0%