QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#851625 | #9974. After god | llldddddd | AC ✓ | 1353ms | 121672kb | C++14 | 3.6kb | 2025-01-10 21:24:44 | 2025-01-10 21:24:44 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000010;
int n,m,c[N];ll a[N],b[N],ans[N];
namespace sub1{
ll mdy(int x,int y){
a[x]=y;ll mx=0,res=0;
for(int i=1;i<=n;i++){
mx=max(mx,a[i]);
b[i]+=mx;
if(i<=x)res+=b[i];
}
return res;
}
void solve(){
while(m--){
int x,y;scanf("%d%d",&x,&y);
printf("%lld\n",mdy(x,y));
}
}
}
namespace sub2{
struct tree{
ll sum,sum_;int mx,se;
int la1,la2,cnt;ll la3;
}tr[N<<2];
struct qry{
int id,x,y;
bool operator<(const qry&t)const{
if(x!=t.x)return x<t.x;
return id<t.id;
}
}p[N];
int lowbit(int x){
return x&-x;
}
void mdy(int x,int y){
while(x<=n){
c[x]=max(c[x],y);
x+=lowbit(x);
}
}
int qry(int x){
int res=0;
while(x){
res=max(res,c[x]);
x-=lowbit(x);
}
return res;
}
void merge(tree &x,tree y){
x.sum_+=1ll*y.la1*x.sum+1ll*x.cnt*y.la3;
x.la1+=y.la1;x.la3+=y.la3;
x.la3+=1ll*x.la2*y.la1;
x.sum+=1ll*x.cnt*y.la2;x.mx+=y.la2;
x.la2+=y.la2;
}
void pushdown(int u){
tree qw;int tmp=min(tr[u<<1].mx,tr[u<<1|1].mx);
qw=tr[u];if(tr[u<<1].mx!=tmp)qw.la2=qw.la3=0;
merge(tr[u<<1],qw);
qw=tr[u];if(tr[u<<1|1].mx!=tmp)qw.la2=qw.la3=0;
merge(tr[u<<1|1],qw);
tr[u].la1=tr[u].la2=tr[u].la3=0;
}
void pushup(int u){
tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
tr[u].sum_=tr[u<<1].sum_+tr[u<<1|1].sum_;
tr[u].mx=min(tr[u<<1].mx,tr[u<<1|1].mx);
if(max(tr[u<<1].mx,tr[u<<1|1].mx)>tr[u].mx){
if(tr[u<<1].mx==tr[u].mx)tr[u].se=min(tr[u<<1].se,tr[u<<1|1].mx);
else tr[u].se=min(tr[u<<1].mx,tr[u<<1|1].se);
}
else tr[u].se=min(tr[u<<1].se,tr[u<<1|1].se);
tr[u].cnt=0;
if(tr[u].mx==tr[u<<1].mx)tr[u].cnt+=tr[u<<1].cnt;
if(tr[u].mx==tr[u<<1|1].mx)tr[u].cnt+=tr[u<<1|1].cnt;
}
void build(int u,int l,int r){
tr[u].la1=tr[u].la2=tr[u].la3=0;
if(l==r){
tr[u].cnt=1;tr[u].mx=0;tr[u].se=0x3f3f3f3f;
return;
}
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void modify(int u,int l,int r,int L,int R,int qw){
if(tr[u].mx>=qw)return;
if(l==L&&r==R&&tr[u].se>qw){
merge(tr[u],{0,0,0,0,0,qw-tr[u].mx,0,0});
return;
}
pushdown(u);
int mid=l+r>>1;
if(R<=mid)modify(u<<1,l,mid,L,R,qw);
else if(L>mid)modify(u<<1|1,mid+1,r,L,R,qw);
else modify(u<<1,l,mid,L,mid,qw),modify(u<<1|1,mid+1,r,mid+1,R,qw);
pushup(u);
}
ll query(int u,int l,int r,int L,int R){
if(l==L&&r==R){
return tr[u].sum_;
}
pushdown(u);
int mid=l+r>>1;
if(R<=mid)return query(u<<1,l,mid,L,R);
else if(L>mid)return query(u<<1|1,mid+1,r,L,R);
else return query(u<<1,l,mid,L,mid)+query(u<<1|1,mid+1,r,mid+1,R);
}
int qry2(int x){
int l=1,r=n;
while(l<r){
int mid=l+r+1>>1;
if(qry(mid)<=a[x])l=mid;
else r=mid-1;
}
if(qry(l)>a[x])return 0;
return l;
}
void solve(){
build(1,1,m);
for(int i=1;i<=m;i++){
int x,y;scanf("%d%d",&x,&y);
p[i]={i,x,y};
}
sort(p+1,p+1+m);
for(int i=1,k=0;i<=m;i++){
while(k<p[i].x){
merge(tr[1],{0,0,0,0,1,0,0,0});k++;
}
int j=i;
for(;j<=m;j++){
if(p[j].x!=p[i].x)break;
}
j--;
for(int l=i;l<=j;l++){
if(l<j)modify(1,1,m,p[l].id,p[l+1].id-1,p[l].y);
else modify(1,1,m,p[l].id,m,p[l].y);
}
k++;merge(tr[1],{0,0,0,0,1,0,0,0});
for(int l=i;l<=j;l++){
ans[p[l].id]=query(1,1,m,1,p[l].id);
}
i=j;
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<"\n";
}
}
}
int main(){
// freopen("array0_4.in","r",stdin);
// freopen("qwq.out","w",stdout);
cin>>n>>m;
sub2::solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 965ms
memory: 121672kb
input:
1000000 1000000 671688 1 193619 1 70068 1 729448 2 832062 64939 205871 1 749767 4 710152 4 993304 117427 157247 1 721584 4 6827 1 369183 2 476643 4 852855 753355 508841 6 245181 3 54307 1 137064 2 115503 2 66950 1 291862 1 770657 976136 191696 4 202434 3 529922 4 231829 2 589065 8 782988 799136 2784...
output:
1 1 1 1912354 3354971 555469 4114011 4395512 52363093869 697440 6578712 1 3592324 5566584 14870965144 7526096 3057721 332367 1644878 1387018 601240 6287130 35959319 3933576 4568550 22006682 6440571 31174109 84319349640 10571127 2675341 6175225 7634985 44934887 18882319 49073254 60939115 371152295314...
result:
ok 1000000 numbers
Test #2:
score: 0
Accepted
time: 1294ms
memory: 121500kb
input:
999999 1000000 312875 3 381493 3 4668 3 87981 7 957493 991572 469162 6 768472 655464 512257 11 367677 9 319351 11 87719 13 34575 12 867648 942096 61897 7 911419 971532 851326 933538 206975 20 350094 20 305931 22 902570 519994 300850 18 315911 22 631720 23 416480 24 27940 26 399456 26 143760 30 47191...
output:
3 411714 3 499888 20390817 11085852 25733992 18818462 14664758 14069670 2242414 897249 455124441246 2798001 881010758320 543188700046 23653493 50607816 47010729 1333494094056 54355931 62374548 159666754 102788888 1605860 116901866 34049196 169383936 150762668 301601687 103750858 387508164 258662566 ...
result:
ok 1000000 numbers
Test #3:
score: 0
Accepted
time: 1208ms
memory: 121608kb
input:
999999 999997 740892 265847 964824 840967 108870 3 469770 4 679463 624417 273008 6 759585 949748 89991 8 419655 9 936798 464191 22772 11 583215 12 544455 13 308829 14 817308 377378 232839 16 85851 17 762553 118364 336401 19 483141 20 54366 21 885647 794497 121171 23 43183 24 864400 918735 561528 26 ...
output:
265847 119064407622 3 2165407 6179147 1969671 169981637490 8 10816319 1403074336882 11 33697621 36684186 21053023 1197148046225 19152419 4857166 761090314280 45949751 79524268 3823005 3127690905142 17855960 3143461 3204474949575 167026493 5512039397761 2835773 4858226096061 1445199 28110298 36768891...
result:
ok 999997 numbers
Test #4:
score: 0
Accepted
time: 1353ms
memory: 121628kb
input:
1000000 1000000 873969 917538 258617 391 679471 55 143506 613 39586 955 173282 118 921617 564545 562228 874 365474 291 716851 20 300357 978 647771 56 833571 898026 419227 827 832060 514628 88905 343 455537 539 874818 340877 302139 648 212710 590 231473 196 639889 730 772833 42741 283901 403 388827 6...
output:
917538 391 329108610 613 955 273614571 309357863512 2490598043 1775749928 4590535048 1872052581 5275956398 7734623821 3931132620 9257126908 565207200 5534296059 246766727025 3892732759 2687772665 3169226064 11015375746 14233993104 4772271218 7286778193 6197751348 13755186665 2853447720 17778477456 5...
result:
ok 1000000 numbers
Test #5:
score: 0
Accepted
time: 862ms
memory: 121572kb
input:
999998 999998 191273 300198 355220 564306 135156 705567 770148 940716 729867 406412 549451 631912 550138 316237 83502 883979 990317 926853 660641 464732 435671 430720 505827 771840 734203 783120 828323 928019 262696 569119 527150 684021 684018 118641 682853 962304 799516 965104 149803 956890 980924 ...
output:
300198 98433987516 705567 1353201350439 1681145302716 1435601807268 1730932929993 883979 5499635512302 3746838486690 2473398599400 3402940572334 5990650227576 7639490036754 1760063222879 5159549435400 7627423446743 8141822676391 10484155201209 813600283545 15219819043967 8479587926397 12888513525800...
result:
ok 999998 numbers