社区讨论
孩子不会卡常,75分求助
P12262 『STA - R9』交错参与者 4已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mhjty4ir
- 此快照首次捕获于
- 2025/11/04 08:27 4 个月前
- 此快照最后确认于
- 2025/11/04 10:29 4 个月前
CPP
#include<bits/stdc++.h>
#define il inline
#define ui unsigned int
#define ll long long
#define ull unsigned ll
#define lll __int128
#define db double
#define ldb long double
#define pii pair<int,int>
#define vi vector<int>
#define vpii vector<pii>
#define fir first
#define sec second
#define gc getchar
#define pc putchar
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pct __builtin_popcount
#define mst(a,x) memset(a,x,sizeof a)
#define mcp(a,b) memcpy(a,b,sizeof b)
using namespace std;
const int N=3010,INF=0x3f3f3f3f,MOD=998244353;
const ll INFll=0x3f3f3f3f3f3f3f3f;
il int rd() {int x=0,f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il ll rdll() {ll x=0; int f=1; char ch=gc(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=gc();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc(); return x*f;}
il void wr(int x) {if(x==INT_MIN) return printf("-2147483648"),void(); if(x<0) return pc('-'),wr(-x); if(x<10) return pc(x+'0'),void(); wr(x/10),pc(x%10+'0');}
il void wrll(ll x) {if(x==LLONG_MIN) return printf("-9223372036854775808"),void(); if(x<0) return pc('-'),wrll(-x); if(x<10) return pc(x+'0'),void(); wrll(x/10),pc(x%10+'0');}
il void wr(int x,char *s) {wr(x),printf("%s",s);}
il void wrll(ll x,char *s) {wrll(x),printf("%s",s);}
il int vmod(int x) {return x>=MOD?x-MOD:x;}
il int vadd(int x,int y) {return vmod(x+y);}
il int vsub(int x,int y) {return vmod(x-y+MOD);}
il int vmul(int x,int y) {return 1ll*x*y%MOD;}
il int qpow(int x,int y) {int r=1; for(;y;y>>=1,x=vmul(x,x)) if(y&1) r=vmul(r,x); return r;}
il void cadd(int &x,int y) {x=vmod(x+y);}
il void csub(int &x,int y) {x=vmod(x-y+MOD);}
il void cmul(int &x,int y) {x=vmul(x,y);}
il void cmax(int &x,int y) {x<y&&(x=y);}
il void cmaxll(ll &x,ll y) {x<y&&(x=y);}
il void cmin(int &x,int y) {x>y&&(x=y);}
il void cminll(ll &x,ll y) {x>y&&(x=y);}
int n,ln,tt,q,a[N],b[N],ps[N],c[N],vs[N],as[N][N];
#define _(x,y) (x<y?as[x][y]:as[y][x])
#define rr register
void upd(int i) {
ln=0;
for(rr int j=1;j<=n;j++) if(a[j]==i) ps[++ln]=j;
ps[ln+1]=n+1;
for(rr int j=1;j<=n;j++) b[_(i,j)]--,_(i,j)=1;
for(rr int j=0;j<=ln;j++) {
tt=0;
for(rr int k=ps[j]+1;k<ps[j+1];k++) if(!vs[a[k]])
_(i,a[k])+=!!j+(j!=ln),c[++tt]=a[k],vs[a[k]]=1;
for(rr int k=1;k<=tt;k++) vs[c[k]]=0;
}
for(rr int j=1;j<=n;j++) b[_(i,j)]++;
}
//#define debug
void QwQ() {
#ifdef debug
n=3000;
for(int i=1;i<=n;i++) a[i]=rand()%n+1;
q=7000;
#else
n=rd();
for(int i=1;i<=n;i++) a[i]=rd();
q=rd();
#endif
b[0]=n*n;
for(int i=1;i<=n;i++) upd(i);
for(int i=n;i;i--) if(b[i]) {wr(i,"\n"); break;}
for(int x,y;q--;) {
#ifdef debug
x=rand()%n+1,y=rand()%n+1;
#else
x=rd(),y=rd();
#endif
int p=a[x]; a[x]=y,upd(p),upd(a[x]);
for(int i=n;i;i--) if(b[i]) {wr(i,"\n"); break;}
}
}
signed main() {
// freopen("in.in","r",stdin);
#ifdef debug
freopen("out.out","w",stdout);
#endif
int T=1; while(T--) QwQ();
}
极限数据本地2.4秒,主要是内存访问不连续,怎么优化?
回复
共 11 条回复,欢迎继续交流。
正在加载回复...