QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#526360 | #5667. Meeting Places | Mitsukasa_Ayase | WA | 0ms | 3560kb | C++20 | 2.5kb | 2024-08-21 14:10:13 | 2024-08-21 14:10:13 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
int M,n,k,m,q,a[N*3],vis[N*3];
ll tr[N*3];
void modify(int x,int v){
for(int i=x;i<=M;i+=i&(-i))
tr[i]+=v;
}
ll qry(int x){
ll res=0;
for(int i=x;i;i-=i&(-i)) res+=tr[i];
return res;
}
ll qr(int l,int r){
return qry(r)-qry(l-1);
}
ll cirdis(int x,int y){
if(x>y) swap(x,y);
return min(qr(x,y-1),qr(y,x+n-1));
}
int upd(int x){
if(x==1) x=n*2+1;
else if(x==k) x=n*2+m+2;
else x=n+x+1;
return x;
}
ll arcdis(int x,int y){
if(x>y) swap(x,y);
return qr(x,y-1);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>k>>m>>q;
for(int i=1;i<=n;++i){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=m+1;++i)
cin>>a[n*2+i];
M=n*2+m+1;
for(int i=1;i<=M;++i) modify(i,a[i]);
for(int i=1;i<=q;++i){
string s;
int x,y;
cin>>s;
if(s[0]=='q'){
cin>>x>>y;
if(x>y) swap(x,y);
ll dis=1e18;
if(y<=n){
if(n>=100)
cout<<"fk "<<y<<" "<<n<<endl;
dis=min(dis,cirdis(x,y));
dis=min(dis,cirdis(x,1)+arcdis(n*2+1,n*2+m+2)+cirdis(k,y));
dis=min(dis,cirdis(x,k)+arcdis(n*2+m+2,n*2+1)+cirdis(1,y));
}else if(x>n){
int xx=upd(x),yy=upd(y);
if(xx>yy) swap(xx,yy);
dis=min(dis,arcdis(xx,yy));
dis=min(dis,arcdis(xx,n*2+1)+cirdis(1,k)+arcdis(yy,n*2+m+2));
}else{
int yy=upd(y);
dis=min(dis,cirdis(x,1)+arcdis(n*2+1,yy));
dis=min(dis,cirdis(x,k)+arcdis(n*2+m+2,yy));
}
if(dis>=1e9)
cout<<"impossible\n";
else
cout<<dis<<"\n";
}else if(s[0]=='c'){
cin>>x;
if(vis[x]){
modify(x,-1e9);
modify(x+n,-1e9);
}else{
modify(x,1e9);
modify(x+n,1e9);
}
vis[x]^=1;
}else{
cin>>x;
x+=2*n+1;
if(vis[x]){
modify(x,-1e9);
}else{
modify(x,1e9);
}
vis[x]^=1;
}
}
return 0;
}
/*
6 4 1 3
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000
1400000000 1400000000
q 1 4
x 0
q 1 4
*/
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3560kb
input:
100 23 213
output:
result:
wrong output format Unexpected end of file - double expected