社区讨论
红温了,所以为什么阿
P1527[国家集训队] 矩阵乘法参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m2ecj3q2
- 此快照首次捕获于
- 2024/10/18 14:25 去年
- 此快照最后确认于
- 2024/10/18 14:46 去年
WA,0pts,修改标注处可AC,所以为什么阿
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=505,M=60005,inf=1145141919810;
ll n,m,a[N][N],cnt;
inline ll lowbit(ll x){
return x&-x;
}
struct BIT{
ll bit[N][N];
void add(ll x,ll y,ll k){
for(;x<=n;x+=lowbit(x))
for(;y<=n;y+=lowbit(y))
bit[x][y]+=k;
}
ll qsum(ll x,ll y){
ll res=0;
for(;x;x-=lowbit(x))
for(;y;y-=lowbit(y))
res+=bit[x][y];
return res;
}
/*
void add(ll x,ll y,ll k){
for(ll i=x;i<=n;i+=lowbit(i))
for(ll j=y;j<=n;j+=lowbit(j))
bit[i][j]+=k;
}
ll qsum(ll x,ll y){
ll res=0;
for(ll i=x;i;i-=lowbit(i))
for(ll j=y;j;j-=lowbit(j))
res+=bit[i][j];
return res;
}
*/
ll qsub(ll a,ll b,ll c,ll d){
return qsum(c,d)-qsum(c,b-1)-qsum(a-1,d)+qsum(a-1,b-1);
}
}T;
struct que{
ll sx,sy,tx,ty,k,id,t;
}q[(M+N*N)<<1],q1[(M+N*N)<<1],q2[(M+N*N)<<1];
ll ans[M];
void solve(ll l,ll r,ll L,ll R){//ansrange:l,r
if(L>R)return;
if(l==r){
for(ll i=L;i<=R;i++)if(q[i].t){
ans[q[i].id]=l;
}
return;
}
ll mid=(l+r)>>1,c1,c2;c1=c2=0;
for(ll i=L;i<=R;i++){
if(q[i].t){
ll rk=T.qsub(q[i].sx,q[i].sy,q[i].tx,q[i].ty);
if(rk>=q[i].k)q1[++c1]=q[i];
else q[i].k-=rk,q2[++c2]=q[i];
}else{
if(q[i].k<=mid)q1[++c1]=q[i],T.add(q[i].sx,q[i].sy,1);
else q2[++c2]=q[i];
}
}
for(ll i=1;i<=c1;i++)if(!q1[i].t)T.add(q1[i].sx,q1[i].sy,-1);
for(ll i=1;i<=c1;i++)q[L+i-1]=q1[i];
for(ll i=1;i<=c2;i++)q[L+c1+i-1]=q2[i];
solve(l,mid,L,L+c1-1);
solve(mid+1,r,L+c1,R);
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=n;j++){
cin>>a[i][j];
q[++cnt]=(que){i,j,0,0,a[i][j],0,0};
}
}
for(ll i=1,sx,sy,tx,ty,k;i<=m;i++){
cin>>sx>>sy>>tx>>ty>>k;
q[++cnt]=(que){sx,sy,tx,ty,k,i,1};
}
solve(0,1000000009,1,cnt);
for(ll i=1;i<=m;i++)cout<<ans[i]<<'\n';
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...