社区讨论
卡常
P13826[Ynoi Easy Round 2026] 寒蝉鸣泣之时参与者 23已保存回复 23
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 23 条
- 当前快照
- 1 份
- 快照标识符
- @mlxhxx48
- 此快照首次捕获于
- 2026/02/22 16:39 2 周前
- 此快照最后确认于
- 2026/02/24 19:25 2 周前
qoj 6.12s/8s,但是这里时限只有 5s,而且评测机慢的要死,根本过不去。
CPP#include<bits/stdc++.h>
#define y1 y111
using namespace std;
typedef long long ll;
const int N=3e5+5,b=547;
int reb_tim;
vector<array<int,3>> a[N];
int n,m,cnt;
int c[N],to[N],tg[N],val[N];
ll ans[N];
vector<int> op[N];
void rep(int x){
int now=0,delta=0;
vector<int> rec;
for(int i:op[x]){
now-=i;
if(now<0) now+=m;
if(now>=m) now-=m;
delta+=i;
val[now]++;
rec.push_back(now);
}
int l=b*x,r=min(b*(x+1)-1,n-1);
for(int j=l;j<=r;j++){
ans[to[j]]+=val[c[j]%m];
}
op[x].clear();
for(int j:rec){
val[j]=0;
}
for(int j=l;j<=r;j++){
c[j]+=delta+tg[x];
int u=c[j]%m;
if(u<=m-u) to[j]=c[j]/m;
else to[j]=c[j]/m+1;
}
tg[x]=0;
}
void rebuild(){
for(int i=0;i<=(n-1)/b;i++){
rep(i);
}
}
void sol1(){
int cnt[10][10]={};
for(int i=1;i<=n;i++){
int x1,x2,y1,y2;
cin>>x1>>x2>>y1>>y2;
x1--,x2--,y1--,y2--;
x2--,y2--;
for(int j=x1;j<=x2;j++){
for(int k=y1;k<=y2;k++){
cnt[j][k]++;
}
}
}
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
ans[cnt[j][k]]++;
}
}
for(int i=m;i<=n;i+=m){
cout<<ans[i]<<"\n";
}
exit(0);
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>m;
if(n<=5){
sol1();
}
reb_tim=max(1,(m-1)/2);
for(int i=1;i<=n;i++){
int x1,x2,y1,y2;
cin>>x1>>x2>>y1>>y2;
x1--,x2--,y1--,y2--;
x2--,y2--;
a[y1].push_back({x1,x2,1});
a[y2+1].push_back({x1,x2,-1});
}
int cnt=0;
for(int h=0;h<n;h++){
for(auto [l,r,k]:a[h]){
if((++cnt)%reb_tim==0){
rebuild();
}
int bl=l/b,br=r/b;
if(bl==br){
rep(bl);
for(int j=l;j<=r;j++){
c[j]+=k;
}
continue;
}
rep(bl);
for(int j=l;j<(bl+1)*b;j++){
c[j]+=k;
}
for(int j=bl+1;j<br;j++){
tg[j]+=k;
}
rep(br);
for(int j=br*b;j<=r;j++){
c[j]+=k;
}
}
for(int i=0;i<=(n-1)/b;i++){
op[i].push_back(tg[i]);
tg[i]=0;
if(op[i].size()>=5e4) rebuild();
}
}
rebuild();
for(int i=1;i<=n/m;i++){
cout<<ans[i]<<"\n";
}
}
回复
共 23 条回复,欢迎继续交流。
正在加载回复...