QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#403756 | #8229. 栈 | flying# | 0 | 194ms | 32732kb | C++14 | 2.9kb | 2024-05-02 18:30:49 | 2024-05-02 18:30:51 |
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()
{
// freopen("1.in","r",stdin);
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,1,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: 12812kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
wrong answer 2nd numbers differ - expected: '3032090730', found: '0'
Subtask #2:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 154ms
memory: 32732kb
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 0 0 0 0 2457516294 0 0 0 2457516294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2457516294 0 2457516294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2457516294 2457516294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2457516294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2457516294 0 0 0 0...
result:
wrong answer 3rd numbers differ - expected: '1254619125', found: '2457516294'
Subtask #3:
score: 0
Wrong Answer
Test #12:
score: 0
Wrong Answer
time: 181ms
memory: 31756kb
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 0 0 0 16065 16065 16065 0 16065 0 0 0 16065 16065 16065 0 0 0 0 0 0 0 0 0 0 0 16065 16065 0 16065 16065 0 16065 0 16065 0 0 16065 0 0 0 16065 0 0 16065 0 0 0 0 0 0 0 16065 16065 0 16065 0 0 0 0 0 16065 0 0 16065 0 0 0 0 16065 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16065 0 0 0 16065 0 0 0 0 0 0 ...
result:
wrong answer 2nd numbers differ - expected: '43794', found: '0'
Subtask #4:
score: 0
Wrong Answer
Test #17:
score: 0
Wrong Answer
time: 194ms
memory: 31904kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
wrong answer 2nd numbers differ - expected: '34602584', found: '0'
Subtask #5:
score: 0
Skipped
Dependency #1:
0%