답안 #62266

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
62266 2018-07-28T00:55:18 Z Benq The grade (info1cup18_thegrade) C++11
100 / 100
93 ms 17312 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 100001;

ll po (ll b, ll p) { return !p?1:po(b*b%MOD,p/2)*(p&1?b:1)%MOD; }
ll inv (ll b) { return po(b,MOD-2); }

int ad(int a, int b) { return (a+b)%MOD; }
int sub(int a, int b) { return (a-b+MOD)%MOD; }
int mul(int a, int b) { return (ll)a*b%MOD; }

int AD(int& a, int b) { return a = ad(a,b); }
int SUB(int& a, int b) { return a = sub(a,b); }
int MUL(int& a, int b) { return a = mul(a,b); }

int oc[1000001], num;
int fac[MX], ifac[MX], in[MX];
int q,p;

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> q >> p;
    
    ll sum = p;
    int cdiv = 1;
    fac[0] = ifac[0] = 1;
    FOR(i,1,MX) {
        in[i] = inv(i);
        fac[i] = mul(fac[i-1],i);
        ifac[i] = mul(ifac[i-1],in[i]);
    }
    
    F0R(i,q) {
        int t,x; cin >> t >> x;
        if (t == 0) {
            num ++, sum -= x;
            MUL(cdiv,in[++oc[x]]);
        } else {
            num --, sum += x;
            MUL(cdiv,oc[x]--);
        }
        if (sum >= 0) cout << mul(mul(fac[num+sum],ifac[sum]),cdiv);
        else cout << -1;
        cout << "\n";
    }
    
}

/* Look for:
* the exact constraints (multiple sets are too slow for n=10^6 :( ) 
* special cases (n=1?)
* overflow (ll vs int?)
* array bounds
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 1528 KB Output is correct
2 Correct 39 ms 1696 KB Output is correct
3 Correct 36 ms 1696 KB Output is correct
4 Correct 37 ms 1696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 1848 KB Output is correct
2 Correct 83 ms 2828 KB Output is correct
3 Correct 79 ms 3912 KB Output is correct
4 Correct 65 ms 4340 KB Output is correct
5 Correct 65 ms 4712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 4712 KB Output is correct
2 Correct 74 ms 5536 KB Output is correct
3 Correct 86 ms 6332 KB Output is correct
4 Correct 69 ms 7104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 1528 KB Output is correct
2 Correct 39 ms 1696 KB Output is correct
3 Correct 36 ms 1696 KB Output is correct
4 Correct 37 ms 1696 KB Output is correct
5 Correct 38 ms 1848 KB Output is correct
6 Correct 83 ms 2828 KB Output is correct
7 Correct 79 ms 3912 KB Output is correct
8 Correct 65 ms 4340 KB Output is correct
9 Correct 65 ms 4712 KB Output is correct
10 Correct 45 ms 4712 KB Output is correct
11 Correct 74 ms 5536 KB Output is correct
12 Correct 86 ms 6332 KB Output is correct
13 Correct 69 ms 7104 KB Output is correct
14 Correct 36 ms 7104 KB Output is correct
15 Correct 65 ms 7616 KB Output is correct
16 Correct 69 ms 8148 KB Output is correct
17 Correct 65 ms 8728 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 1848 KB Output is correct
2 Correct 83 ms 2828 KB Output is correct
3 Correct 79 ms 3912 KB Output is correct
4 Correct 65 ms 4340 KB Output is correct
5 Correct 65 ms 4712 KB Output is correct
6 Correct 84 ms 9368 KB Output is correct
7 Correct 67 ms 9876 KB Output is correct
8 Correct 76 ms 10392 KB Output is correct
9 Correct 68 ms 10924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 4712 KB Output is correct
2 Correct 74 ms 5536 KB Output is correct
3 Correct 86 ms 6332 KB Output is correct
4 Correct 69 ms 7104 KB Output is correct
5 Correct 70 ms 11768 KB Output is correct
6 Correct 83 ms 12804 KB Output is correct
7 Correct 92 ms 13784 KB Output is correct
8 Correct 90 ms 14384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 1528 KB Output is correct
2 Correct 39 ms 1696 KB Output is correct
3 Correct 36 ms 1696 KB Output is correct
4 Correct 37 ms 1696 KB Output is correct
5 Correct 38 ms 1848 KB Output is correct
6 Correct 83 ms 2828 KB Output is correct
7 Correct 79 ms 3912 KB Output is correct
8 Correct 65 ms 4340 KB Output is correct
9 Correct 65 ms 4712 KB Output is correct
10 Correct 45 ms 4712 KB Output is correct
11 Correct 74 ms 5536 KB Output is correct
12 Correct 86 ms 6332 KB Output is correct
13 Correct 69 ms 7104 KB Output is correct
14 Correct 36 ms 7104 KB Output is correct
15 Correct 65 ms 7616 KB Output is correct
16 Correct 69 ms 8148 KB Output is correct
17 Correct 65 ms 8728 KB Output is correct
18 Correct 84 ms 9368 KB Output is correct
19 Correct 67 ms 9876 KB Output is correct
20 Correct 76 ms 10392 KB Output is correct
21 Correct 68 ms 10924 KB Output is correct
22 Correct 70 ms 11768 KB Output is correct
23 Correct 83 ms 12804 KB Output is correct
24 Correct 92 ms 13784 KB Output is correct
25 Correct 90 ms 14384 KB Output is correct
26 Correct 73 ms 15008 KB Output is correct
27 Correct 73 ms 15680 KB Output is correct
28 Correct 84 ms 16292 KB Output is correct
29 Correct 73 ms 16664 KB Output is correct
30 Correct 93 ms 17312 KB Output is correct