QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#770786#9731. Fuzzy Rankingtjf4RE 0ms13864kbC++203.6kb2024-11-22 00:11:232024-11-22 00:11:25

Judging History

你现在查看的是最新测评结果

  • [2024-11-25 12:28:53]
  • hack成功,自动添加数据
  • (/hack/1257)
  • [2024-11-22 00:11:25]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:13864kb
  • [2024-11-22 00:11:23]
  • 提交

answer

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
typedef vector<pii> vii;
typedef vector<ll> vi;
typedef vector<string> vs;
typedef vector<char> vc;
const int inf=0x3f;
const int N=2e5+10;
ll n,m,k,bk,nx[N],mi[N],idk[N],ls[N],rs[N],f[505][505],g[505][505];
vi e[N],h[N],fk[505][505],gk[505][505];
void init() {
	bk=sqrt(n);
	for(int i=1;i<=n;i++) idk[i]=(i-1)/bk+1;
	for(int i=1;i<=n;i++) rs[idk[i]]=i;
	for(int i=n;i>=1;i--) ls[idk[i]]=i;
	for(int i=1;i<=k;i++) {
		for(int j=1;j<=idk[n];j++) {
			fk[i][j].clear();
			gk[i][j].clear();
			g[i][j]=0;
		}
	}
	for(int i=1;i<=k;i++) {
		for(int j=1;j<=n;j++) {
			fk[i][idk[j]].push_back(h[i][j-1]);
			g[i][idk[j]]+=(j-h[i][j-1]);
		}
		for(int j=1;j<=idk[n];j++) {
			sort(fk[i][j].begin(),fk[i][j].end());
			for(auto v:fk[i][j]) {
				ll w=v;
				if(!gk[i][j].empty()) w+=gk[i][j].back();
				gk[i][j].push_back(w);
			}
		}
	}
}
ll qry(ll id,ll l,ll r) {
	ll ans=0;
	for(int i=idk[l]+1;i<=idk[r]-1;i++) {
		ans+=g[id][i];
		auto it=lower_bound(fk[id][i].begin(),fk[id][i].end(),l)-fk[id][i].begin();
		if(it==0) continue;
		ans-=(it*l-gk[id][i][it-1]);
	}
	if(idk[l]==idk[r]) {
		for(int i=l+1;i<=r;i++) {
			ll lf=h[id][i-1];
			if(lf<l) ans+=(i-l);
			else ans+=(i-lf);
		}
	}
	else {
		for(int i=l+1;i<=rs[idk[l]];i++) {
			ll lf=h[id][i-1];
			if(lf<l) ans+=(i-l);
			else ans+=(i-lf);
		}
		for(int i=ls[idk[r]];i<=r;i++) {
			ll lf=h[id][i-1];
			if(lf<l) ans+=(i-l);
			else ans+=(i-lf);
		}
	}
	return ans;
}
int main() {
	IOS
	int T;
	cin>>T;
	while(T--) {
		cin>>n>>k>>m;
		vector<vi> mp(k+5,vi(n+5,0));
		for(int i=0;i<=k+1;i++) {
			e[i].clear();
			h[i].clear();
		}
		for(int i=1;i<=k;i++) {
			for(int j=1;j<=n;j++) {
				ll x; cin>>x;
				e[i].push_back(x); 
				mp[i][x]=j;
			}
		}
		if(k<n) {
			for(int i=1;i<=k;i++) {
				for(int j=1;j<=k;j++) nx[j]=mi[j]=n+1;
				for(int j=n;j>=1;j--) {
					ll x=e[i][j-1],as=j;
					for(int r=1;r<=k;r++) {
						while(nx[r]>mp[r][x]) {
							--nx[r];
							ll now_r=e[r][nx[r]-1];
							mi[r]=min(mi[r],mp[i][now_r]);
						}
						as=min(as,mi[r]);
					}
					h[i].push_back(as);
				}
				reverse(h[i].begin(),h[i].end());
			}
			init();
			ll mask=0;
			while(m--) {
				ll id,l,r;
				cin>>id>>l>>r;
				id=(id+mask)%k+1;
				l=(l+mask)%n+1;
				r=(r+mask)%n+1;
				ll ans=qry(id,l,r);
				cout<<ans<<'\n';
				mask=ans;
			}
		}
		else {
//			for(int i=1;i<=n;i++) {
//				for(int j=1;j<=n;j++) {
//					f[i][j]=0;
//				}
//			}
//			for(int i=1;i<=k;i++) {
//				for(int j=1;j<=n;j++) {
//					for(int r=j;r<=n;r++) {
//						int x=e[i][j-1];
//						int y=e[i][r-1];
//						f[x][y]=1;
//					}
//				}
//			}
//			for(int r=1;r<=n;r++) {
//				for(int i=1;i<=n;i++) {
//					for(int j=1;j<=n;j++) {
//						f[i][j]|=(f[i][r]&f[r][j]);
//					}
//				}
//			}
//			for(int i=1;i<=k;i++) {
//				for(int j=1;j<=n;j++) {
//					int x=e[i][j-1],as=j;
//					for(int r=1;r<j;r++) {
//						int y=e[i][r-1];
//						if(f[x][y]) {
//							as=r;
//							break;
//						}
//					}
//					h[i].push_back(as);
//				}
//			}
//			ll mask=0;
//			while(m--) {
//				ll id,l,r;
//				cin>>id>>l>>r;
//				id=(id+mask)%k+1;
//				l=(l+mask)%n+1;
//				r=(r+mask)%n+1;
//				ll ans=0;
//				for(int i=l+1;i<=r;i++) {
//					ll lf=h[id][i-1];
//					if(lf<l) ans+=(i-l);
//					else ans+=(i-lf);
//				}
//				cout<<ans<<'\n';
//				mask=ans;
//			}
		}
	}
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 13864kb

input:

2
5 2 2
1 2 3 4 5
5 4 3 2 1
1 0 2
1 2 1
5 3 3
1 2 3 4 5
1 3 2 4 5
1 2 3 5 4
0 0 2
0 2 3
1 0 3

output:

3
10
1
1
2

result:

ok 5 lines

Test #2:

score: -100
Runtime Error

input:

2000
10 10 10
4 5 3 6 8 9 2 1 7 10
4 5 6 3 8 9 1 2 10 7
5 4 3 6 8 9 1 2 7 10
4 5 6 3 8 9 1 2 7 10
4 5 3 6 8 9 2 1 10 7
4 5 6 3 8 9 1 2 10 7
5 4 6 3 8 9 1 2 7 10
5 4 6 3 8 9 1 2 10 7
4 5 6 3 8 9 2 1 7 10
5 4 3 6 8 9 2 1 10 7
3 1 6
5 7 8
0 2 3
7 9 9
2 1 9
6 1 6
7 2 3
0 0 4
1 8 1
1 8 7
10 10 10
9 10 5 ...

output:


result: