QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#397539#3744. Fixed PointSamponYWAC ✓183ms31688kbC++141.8kb2024-04-24 11:58:162024-04-24 11:58:16

Judging History

This is the latest submission verdict.

  • [2024-04-24 11:58:16]
  • Judged
  • Verdict: AC
  • Time: 183ms
  • Memory: 31688kb
  • [2024-04-24 11:58:16]
  • Submitted

answer

#include <bits/stdc++.h>
#define db double
#define il inline
#define re register
#define ll long long
#define ui unsigned
#define ull ui ll
#define i128 __int128
#define pii pair<int, int>
#define fi first
#define se second
#define eb emplace_back
#define SZ(v) (int)v.size()
#define ALL(v) v.begin(), v.end()
#define mems(v, x) memset(v, x, sizeof(v))
#define memc(a, b) memcpy(a, b, sizeof(a))
#define FOR(i, L, R) for(re int i = (L); i <= (R); ++i)
#define ROF(i, R, L) for(re int i = (R); i >= (L); --i)
#define LS i << 1, l, mid
#define RS i << 1 | 1, mid + 1, r
#define popc(x) __builtin_popcount(x)
using namespace std;
#define N 100005
#define M 10
int n, m, T, a[N], b[N], p[N], q[N], id[N];
bool u[N]; vector<int> cnt[M][N], c[M];
il void WORK() {
  FOR(i, 1, m) cin >> a[i] >> b[i], a[i + m] = a[i], b[i + m] = b[i];
  FOR(r, 0, m - 1) {
    vector<int>().swap(c[r]);
    FOR(i, 1, n) vector<int>().swap(cnt[r][i]);
    FOR(i, 1, n) p[i] = q[i] = i, u[i] = 0, id[i] = -1;
    FOR(i, 1, r) reverse(p + a[i], p + b[i] + 1);
    FOR(i, 1, m) reverse(q + a[i + r], q + b[i + r] + 1);
    FOR(i, 1, n) if(!u[i]) {
      int x = i, k = 0; vector<int> v;
      while(!u[x]) u[x] = 1, id[x] = k++, v.eb(x), x = q[x];
      cnt[r][k].resize(k), c[r].eb(k);
      for(auto x : v) {
        if(id[p[x]] == -1) continue;
        ++cnt[r][k][(id[x] - id[p[x]] + k) % k];
      }
      for(auto x : v) id[x] = -1;
    }
    sort(ALL(c[r])), c[r].erase(unique(ALL(c[r])), c[r].end());
  }
  while(T--) {
    int k; cin >> k;
    int r = k % m, t = k / m, ans = 0;
    for(auto x : c[r]) ans += cnt[r][x][t % x];
    cout << ans << "\n";
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  while(cin >> n >> m >> T) WORK();
  cerr << 1.0 * clock() / CLOCKS_PER_SEC;
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 183ms
memory: 31688kb

input:

100000 10 100000
3135 43886
11880 99989
6753 75994
49859 61511
34135 56769
36040 94909
31157 40208
1045 52859
17015 29390
34992 75590
427894487
754397106
304363104
288735752
794969909
361436976
343784951
800838635
507520362
111733743
43029867
107598330
993009440
179455786
17298032
187551627
96418485...

output:

1055
1055
1056
1057
1056
1785
1055
1056
1055
1057
1055
1055
1785
1055
1056
1055
1055
1056
1055
1785
1055
1056
1060
1055
1057
1056
1785
1056
1057
6417
3372
1057
1055
1057
1068
3371
1055
1055
1785
1055
1055
6417
1056
1056
1787
1055
1061
1056
1055
1056
1055
1056
1786
1056
1055
1811
1785
4101
1785
1055
...

result:

ok 500000 numbers