QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#878545#9726. AUSucup-team5008#RE 0ms0kbC++201.9kb2025-02-01 15:58:492025-02-01 15:58:54

Judging History

This is the latest submission verdict.

  • [2025-02-01 15:58:54]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-01 15:58:49]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
#define rep2(i,j,k) for(ll i=ll(j);i<ll(k);i++)
#define rep(i,k) rep2(i,0,k)
#define rrep2(i,j,k) for(ll i=ll(j)-1;i>=ll(k);i--)
#define rrep(i,j) rrep2(i,j,0)
#define all(a) a.begin(),a.end()
#define SZ(a) ll(a.size())
#define eb emplace_back
using ll=long long;
using vl=vector<ll>;
using vvl=vector<vl>;
using P=pair<ll,ll>;
using vp=vector<P>;
using vvp=vector<vp>;
const ll inf=LLONG_MAX/4;
template<class T>
bool chmin(T& a,T b){return a>b?a=b,1:0;}
template<class T>
bool chmax(T& a,T b){return a<b?a=b,1:0;}

vvl G;
vl ord, low, id;
stack<int> st;
int sz;

void dfs(int u, int &k) {
	ord[u] = low[u] = k++;
	st.push(u);
	for(ll v : G[u]) {
		if(ord[v] == -1) {
			dfs(v, k);
			chmin(low[u], low[v]);
		} else {
			chmin(low[u], ord[v]);
		}
	}
	if(low[u] == ord[u]) {
		while(true) {
			int now = st.top();
			st.pop();
			ord[now] = inf;
			id[now] = sz;
			if(now == u) break;
		}
		++sz;
	}
}

ll f(ll n) {
	return n*(n-1)/2;
}

void solve() {
	int n, k, q;
	cin >> n >> k >> q;
	G.clear();
	G.resize(n);
	vvl a(k, vl(n));
	rep(i, k) rep(j, n) {
		cin >> a[i][j];
		--a[i][j];
		if(j) G[a[i][j-1]].eb(a[i][j]);
	}
	ord.assign(n, -1);
	low.resize(n);
	id.resize(n);
	sz = 0;
	int kk = 0;
	rep(i, n) if(ord[i] == -1) dfs(i, kk);
	rep(i, k) rep(j, n) {
		a[i][j] = id[a[i][j]];
		if(j) assert(a[i][j] >= a[i][j-1]);
	}
	vl sum(sz+1);
	rep(i, n) ++sum[id[i]+1];
	rep2(i, 1, sz+1) {
		sum[i] = f(sum[i]) + sum[i-1];
	}
	ll pre = 0;
	while(q--) {
		ll _i, _l, _r;
		cin >> _i >> _l >> _r;
		ll i = (_i+pre)%k;
		ll l = (_l+pre)%n;
		ll r = (_r+pre)%n;
		ll ans = 0;
		int s = a[i][l];
		int t = a[i][r];
		assert(s <= t);
		if(s == t) {
			ans = f(r-l+1);
		} else {
			ans = sum[t]-sum[s+1];
			ans += f(lower_bound(all(a[i]), s+1)-a[i].begin()-l);
			ans += f(r-(lower_bound(all(a[i]), t)-a[i].begin())+1);
		}
		cout << ans << '\n';
		pre = ans;
	}
}

int main(){
	cin.tie(0)->sync_with_stdio(0);
	int t;
	cin >> t;
	rep(_, t) solve();
}

詳細信息

Test #1:

score: 0
Runtime Error

input:

4
abab
cdcd
abce
abab
cdcd
abcd
abab
cdcd
abc
x
yz
def

output:


result: