QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#398865 | #2560. Streetlights | zjy0001 | WA | 13ms | 46684kb | C++14 | 4.0kb | 2024-04-25 19:19:38 | 2024-04-25 19:19:42 |
Judging History
answer
#include<bits/stdc++.h>
#define LL long long
#define LLL __int128
#define uint unsigned
#define ldb long double
#define uLL unsigned long long
using namespace std;
const int N=1e5+5,M=2.5e5+5,INF=1e9;
int n,q,a[N],A[N],pos[M],rp[M],b[N+M],ans[M],bns[M];
set<int>pre[N+M],suf[N+M];
vector<tuple<int,int,int,int>>vec[N+M];
struct node{int mxa,sea,mxb,seb,adc;}T[M*4];
inline void pushup(const int&p){
const int ls=p*2,rs=p*2+1;
T[p].mxa=max(T[ls].mxa,T[rs].mxa);
T[p].mxb=max(T[ls].mxb,T[rs].mxb);
T[p].sea=max((T[p].mxa==T[ls].mxa?T[ls].sea:T[ls].mxa),(T[p].mxa==T[rs].mxa?T[rs].sea:T[rs].mxa));
T[p].seb=max((T[p].mxb==T[ls].mxb?T[ls].seb:T[ls].mxb),(T[p].mxb==T[rs].mxb?T[rs].seb:T[rs].mxb));
T[p].adc=0;
}
inline void build(int p,int l,int r,int a,int b){
T[p].mxa=a,T[p].sea=-1-INF,T[p].mxb=b,T[p].seb=-1-INF,T[p].adc=0;
if(l==r)return;
const int mid=(l+r)>>1;
build(p*2,l,mid,a,b),build(p*2+1,mid+1,r,a,b);
}
inline void upd(int p,int l,int r,int a,int b,int c){
if(T[p].mxa<a||T[p].mxb<b){
T[p].mxa=min(T[p].mxa,a),T[p].mxb=min(T[p].mxb,b);
return;
}
if(T[p].sea<a&&T[p].seb<b){
T[p].mxa=min(T[p].mxa,a),T[p].mxb=min(T[p].mxb,b),T[p].adc+=c;
return;
}
const int mid=(l+r)>>1,ls=p*2,rs=p*2+1;
upd(ls,l,mid,T[p].mxa,T[p].mxb,T[p].adc);
upd(rs,mid+1,r,T[p].mxa,T[p].mxb,T[p].adc);
upd(ls,l,mid,a,b,c);
upd(rs,mid+1,r,a,b,c);
pushup(p);
}
inline void upd(int p,int l,int r,int x,int y,int a,int b,int c){
if(x<=l&&r<=y)return upd(p,l,r,a,b,c);
const int mid=(l+r)>>1,ls=p*2,rs=p*2+1;
upd(ls,l,mid,T[p].mxa,T[p].mxb,T[p].adc);
upd(rs,mid+1,r,T[p].mxa,T[p].mxb,T[p].adc);
if(x<=mid)upd(ls,l,mid,x,y,a,b,c);
if(mid<y)upd(rs,mid+1,r,x,y,a,b,c);
pushup(p);
}
inline void qry(int p,int l,int r){
if(l==r)return bns[l]=T[p].adc,void();
const int mid=(l+r)>>1,ls=p*2,rs=p*2+1;
upd(ls,l,mid,T[p].mxa,T[p].mxb,T[p].adc);
upd(rs,mid+1,r,T[p].mxa,T[p].mxb,T[p].adc);
qry(ls,l,mid),qry(rs,mid+1,r);
}
inline void solve(int l,int r,vector<tuple<int,int,int>>&Q){
if(l>=r)return;
const int mid=(l+r)>>1;
int m=r-l+1,q=0;
copy(a+l,a+r+1,b+1);
vector<tuple<int,int,int>>nQ;
for(auto&[x,y,id]:Q)if(l<=x&&x<=r)
nQ.emplace_back(x,y,id),b[++m]=y,rp[pos[id]=++q]=id;
sort(b+1,b+m+1);
for(int i=l;i<=r;++i)
A[i]=lower_bound(b+1,b+m+1,a[i])-b,
(i<=mid?pre[A[i]]:suf[A[i]]).emplace(i<=mid?-i:i);
for(int i=1;i<=m;++i)
vec[i].emplace_back(
0,q,
pre[i].empty()?INF:*pre[i].begin(),
suf[i].empty()?INF:*suf[i].begin());
for(auto [x,y,id]:nQ){
y=lower_bound(b+1,b+m+1,y)-b;
int z=A[x];
if(y!=z){
get<1>(vec[y].back())=pos[id]-1;
get<1>(vec[z].back())=pos[id]-1;
if(x<=mid)pre[z].erase(-x),pre[y].emplace(-x);
else suf[z].erase(x),suf[y].emplace(x);
A[x]=y;
vec[y].emplace_back(
pos[id],q,
pre[y].empty()?INF:*pre[y].begin(),
suf[y].empty()?INF:*suf[y].begin());
vec[z].emplace_back(
pos[id],q,
pre[z].empty()?INF:*pre[z].begin(),
suf[z].empty()?INF:*suf[z].begin());
}
}
build(1,0,q,-l,r);
for(int i=m;i>=1;--i){
for(auto [l,r,x,y]:vec[i])upd(1,0,q,l,r,x,y,1);
pre[i].clear(),suf[i].clear(),vec[i].clear();
}
qry(1,0,q);
for(int i=0;i<=q;++i)ans[rp[i]]+=bns[i]-(i?bns[i-1]:0);
Q=nQ,solve(l,mid,Q),solve(mid+1,r,nQ);
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
// freopen("tower.in","r",stdin);
// freopen("tower.out","w",stdout);
cin>>n>>q;
vector<tuple<int,int,int>>Q;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=q;++i){
int x,y;cin>>x>>y,Q.emplace_back(x,y,i);
}
solve(1,n,Q);
for(int i=0;i<=q;++i)
cout<<ans[i]<<'\n',ans[i+1]+=ans[i];
return 0;
}
/*
*/
详细
Test #1:
score: 100
Accepted
time: 13ms
memory: 46684kb
input:
6 2 4 2 2 2 4 6 4 6 6 4
output:
3 2 2
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 8ms
memory: 46560kb
input:
50 100 310081863 722273055 654741011 310081863 654741011 722273055 654741011 722273055 654741011 654741011 654741011 310081863 310081863 722273055 654741011 654741011 654741011 722273055 310081863 654741011 310081863 310081863 310081863 722273055 310081863 654741011 654741011 310081863 722273055 722...
output:
28 28 28 29 30 31 31 31 31 31 31 31 31 32 33 34 34 33 33 33 33 32 32 31 31 31 32 32 31 31 31 31 30 30 30 31 31 31 31 31 31 30 30 29 30 31 32 32 32 32 32 31 32 33 33 33 33 32 32 31 32 33 31 31 32 31 32 31 31 31 30 31 30 29 29 28 28 29 28 28 27 27 27 27 27 27 26 27 28 27 28 29 28 28 28 28 29 29 28 29 28
result:
ok 101 lines
Test #3:
score: -100
Wrong Answer
time: 3ms
memory: 46484kb
input:
50 100 93308794 275481889 130830018 675774101 130830018 93308794 275481889 999873895 275481889 104418887 130830018 275481889 675774101 999873895 130830018 841188804 360486542 104418887 140762403 275481889 275481889 770511267 104418887 140762403 93308794 675774101 104418887 770511267 130830018 933087...
output:
12 12 11 11 11 11 11 11 10 10 10 10 10 10 10 11 11 11 11 12 12 12 12 12 11 10 11 11 11 11 11 12 13 12 12 13 13 14 12 11 11 10 10 10 10 10 9 9 9 9 9 9 8 9 10 10 9 10 9 9 9 10 10 11 12 12 13 14 14 13 14 14 13 13 13 13 13 13 13 13 12 12 12 12 12 12 13 13 13 13 15 16 15 17 18 18 17 17 16 16 15
result:
wrong answer 68th lines differ - expected: '13', found: '14'