結果
| 問題 |
No.510 二次漸化式
|
| コンテスト | |
| ユーザー |
e869120
|
| 提出日時 | 2018-06-10 12:42:54 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 936 bytes |
| コンパイル時間 | 744 ms |
| コンパイル使用メモリ | 76,472 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-30 13:15:02 |
| 合計ジャッジ時間 | 18,554 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 10 WA * 24 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, q, a[100009], b[100009], x[100009], y[100009], mod = 1000000007;
char c[100009]; vector<int>vec;
int main() {
cin >> n >> q;
for (int i = 1; i <= q; i++) {
cin >> c[i];
if (c[i] == 'x' || c[i] == 'y') {
cin >> a[i] >> b[i]; vec.push_back(a[i]);
}
else cin >> a[i];
}
sort(vec.begin(), vec.end()); vec.erase(unique(vec.begin(), vec.end()), vec.end());
for (int i = 1; i <= q; i++) {
if (c[i] == 'x') x[a[i]] = b[i];
if (c[i] == 'y') y[a[i]] = b[i];
if (c[i] == 'a') {
long long s = a[i], ret = 1, K = 0;
for (int j = 0; j < vec.size(); j++) {
if (vec[j] >= a[i]) break;
s--;
if (j == 0 || vec[j] - vec[j - 1] >= 2) K = 1;
if (x[vec[j]] >= 1) ret += 1LL * (1LL * K * K % mod) * x[vec[j]] % mod;
K = (1LL * K * y[vec[j]] + 1LL) % mod;
}
cout << (ret + s + mod) % mod << endl;
}
}
return 0;
}
e869120