Submission #140846

# Submission time Handle Problem Language Result Execution time Memory
140846 2019-08-05T15:45:02 Z karma Examination (JOI19_examination) C++11
43 / 100
3000 ms 780532 KB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define FileName      "test"
#define ll            long long
#define ld            long double
#define ull           unsigned long long
#define Debug(x)      cerr << #x << "is " << x << '\n';
#define pb            emplace_back
#define mp            make_pair
#define x             first
#define y             second
//#define LuckyAurora
//#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
//#pragma GCC optimization ("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")

using namespace std;
using namespace __gnu_pbds;

template<typename T> inline void Cin(T &x)
{
    char c;
    T sign = 1;
    x = 0;
    for (c = getchar(); c < '0' || c > '9'; c = getchar())
        if (c == '-') sign = -1;
    for (; c >= '0' && c <= '9'; c = getchar())
        x = x * 10 + c - '0';
    x *= sign;
}
template <typename T> inline void Out(T x) {if(x > 9) Out(x / 10); putchar(x % 10 + '0');}
template <typename T> inline void Cout(T x, char c) {if(x < 0) putchar('-'); x = abs(x); Out(x); putchar(c);}
template <typename T, typename... Args> inline void Cin(T& a, Args&... args) {Cin(a);Cin(args...);}
template <typename T, typename... Args> inline void Cout(T a, char c, Args... args) {Cout(a, c);Cout(args...);}
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

typedef pair<int, int> pii;
const int N = int(1e5) + 7;

struct TSegment
{
    bool Get(int x, int i) {return (x >> i) & 1;}
    struct TTrie {TTrie* chil[2]; int cur;};
    typedef TTrie* PTrie;
    vector<PTrie> t;
    PTrie Node()
    {
          PTrie ptr = new TTrie();
          ptr -> chil[0] = ptr -> chil[1] = NULL, ptr -> cur = 0;
          return ptr;
    }
    void Update(int x, PTrie ptr)
    {
         bool bit; ++ptr -> cur;
         for(int i = 30; i >= 0; --i) {
            bit = Get(x, i);
            if(ptr -> chil[bit] == NULL) ptr -> chil[bit] = Node();
            ptr = ptr -> chil[bit];
            ++ptr -> cur;
         }
    }
    int Count(int x, PTrie ptr)
    {
        int res = ptr -> cur; bool bit;
        for(int i = 30; i >= 0; --i) {
            bit = Get(x, i);
            if(bit && ptr -> chil[0]) res -= ptr -> chil[0] -> cur;
            if(ptr -> chil[bit] == NULL) return res;
            ptr = ptr -> chil[bit];
        }
        return res;
    }
    vector<int> l, h;
    void Build(int x, int low, int high)
    {
        l[x] = low, h[x] = high;
        while(t.size() <= x) t.pb(Node());
        if(l[x] == h[x]) {return;}
        int mid = (low + high) >> 1;
        Build(x << 1, low, mid);
        Build(x << 1 | 1, mid + 1, high);
    }
    void Update(int x, int pos, int val)
    {
        if(l[x] > pos || h[x] < pos) return;
        if(l[x] <= pos && pos <= h[x]) Update(val, t[x]);
        if(l[x] == h[x]) return;
        Update(x << 1, pos, val);
        Update(x << 1 | 1, pos, val);
    }
    int Query(int x, int low, int high, int val)
    {
        if(l[x] > high || h[x] < low) return 0;
        if(l[x] >= low && h[x] <= high) return Count(val, t[x]);
        return Query(x << 1, low, high, val) + Query(x << 1 | 1, low, high, val);
    }
} irene;

int n, Q;
vector<int> v, res;
vector<pii> a;
struct TQuery
{
    int a, b, c, id;
    bool operator <(const TQuery& other)const& {
        return a > other.a;
    }
};
vector<TQuery> q;

void Enter()
{
     Cin(n, Q); q.resize(Q); a.resize(n); res.resize(Q);
     for(pii& p: a) Cin(p.x, p.y), v.pb(p.y);
     sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end());
     sort(a.begin(), a.end(), [](const pii& a, const pii& b){return a.x > b.x;});
}

void Solve()
{
     for(int i = 0; i < Q; ++i) Cin(q[i].a, q[i].b, q[i].c), q[i].id = i;
     sort(q.begin(), q.end()); irene.l.resize(4 * int(v.size())); irene.h.resize(4 * int(v.size()));
     int j = 0, p; irene.Build(1, 1, int(v.size()));
     for(TQuery que: q) {
         while(a[j].x >= que.a && j < n) {
            p = lower_bound(v.begin(), v.end(), a[j].y) - v.begin() + 1;
            irene.Update(1, p, a[j].x + a[j].y);
            ++j;
         }
         p = lower_bound(v.begin(), v.end(), que.b) - v.begin() + 1;
         res[que.id] = irene.Query(1, p, int(v.size()), que.c);
     }
     for(int i = 0; i < Q; ++i) cout << res[i] << '\n';
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    if(fopen(FileName".inp", "r")) {
        freopen(FileName".inp", "r", stdin);
        freopen(FileName".out", "w", stdout);
    }

    /*int nTest; cin >> nTest;
    while(nTest --)*/ Enter(), Solve();

    return 0;
}

Compilation message

examination.cpp:15:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("O3")
 
examination.cpp: In member function 'void TSegment::Build(int, int, int)':
examination.cpp:79:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while(t.size() <= x) t.pb(Node());
                        ^
examination.cpp: In function 'int main()':
examination.cpp:143:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(FileName".inp", "r", stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
examination.cpp:144:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(FileName".out", "w", stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 66 ms 31224 KB Output is correct
8 Correct 66 ms 31224 KB Output is correct
9 Correct 66 ms 31148 KB Output is correct
10 Correct 22 ms 9592 KB Output is correct
11 Correct 60 ms 26136 KB Output is correct
12 Correct 5 ms 500 KB Output is correct
13 Correct 63 ms 31196 KB Output is correct
14 Correct 64 ms 31224 KB Output is correct
15 Correct 71 ms 31196 KB Output is correct
16 Correct 58 ms 26232 KB Output is correct
17 Correct 8 ms 2396 KB Output is correct
18 Correct 3 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2589 ms 558356 KB Output is correct
2 Correct 2603 ms 558192 KB Output is correct
3 Correct 2513 ms 558120 KB Output is correct
4 Correct 204 ms 48856 KB Output is correct
5 Correct 1651 ms 220272 KB Output is correct
6 Correct 106 ms 5236 KB Output is correct
7 Correct 2606 ms 558192 KB Output is correct
8 Correct 2510 ms 557936 KB Output is correct
9 Correct 2479 ms 557808 KB Output is correct
10 Correct 1487 ms 208724 KB Output is correct
11 Correct 81 ms 10484 KB Output is correct
12 Correct 45 ms 4852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2589 ms 558356 KB Output is correct
2 Correct 2603 ms 558192 KB Output is correct
3 Correct 2513 ms 558120 KB Output is correct
4 Correct 204 ms 48856 KB Output is correct
5 Correct 1651 ms 220272 KB Output is correct
6 Correct 106 ms 5236 KB Output is correct
7 Correct 2606 ms 558192 KB Output is correct
8 Correct 2510 ms 557936 KB Output is correct
9 Correct 2479 ms 557808 KB Output is correct
10 Correct 1487 ms 208724 KB Output is correct
11 Correct 81 ms 10484 KB Output is correct
12 Correct 45 ms 4852 KB Output is correct
13 Correct 2889 ms 558388 KB Output is correct
14 Correct 2667 ms 558508 KB Output is correct
15 Correct 2537 ms 558356 KB Output is correct
16 Correct 263 ms 49140 KB Output is correct
17 Correct 1702 ms 221040 KB Output is correct
18 Correct 105 ms 5236 KB Output is correct
19 Correct 2795 ms 558492 KB Output is correct
20 Correct 2757 ms 558636 KB Output is correct
21 Correct 2873 ms 558688 KB Output is correct
22 Correct 1491 ms 209144 KB Output is correct
23 Correct 80 ms 10484 KB Output is correct
24 Correct 48 ms 4852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 380 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 66 ms 31224 KB Output is correct
8 Correct 66 ms 31224 KB Output is correct
9 Correct 66 ms 31148 KB Output is correct
10 Correct 22 ms 9592 KB Output is correct
11 Correct 60 ms 26136 KB Output is correct
12 Correct 5 ms 500 KB Output is correct
13 Correct 63 ms 31196 KB Output is correct
14 Correct 64 ms 31224 KB Output is correct
15 Correct 71 ms 31196 KB Output is correct
16 Correct 58 ms 26232 KB Output is correct
17 Correct 8 ms 2396 KB Output is correct
18 Correct 3 ms 504 KB Output is correct
19 Correct 2589 ms 558356 KB Output is correct
20 Correct 2603 ms 558192 KB Output is correct
21 Correct 2513 ms 558120 KB Output is correct
22 Correct 204 ms 48856 KB Output is correct
23 Correct 1651 ms 220272 KB Output is correct
24 Correct 106 ms 5236 KB Output is correct
25 Correct 2606 ms 558192 KB Output is correct
26 Correct 2510 ms 557936 KB Output is correct
27 Correct 2479 ms 557808 KB Output is correct
28 Correct 1487 ms 208724 KB Output is correct
29 Correct 81 ms 10484 KB Output is correct
30 Correct 45 ms 4852 KB Output is correct
31 Correct 2889 ms 558388 KB Output is correct
32 Correct 2667 ms 558508 KB Output is correct
33 Correct 2537 ms 558356 KB Output is correct
34 Correct 263 ms 49140 KB Output is correct
35 Correct 1702 ms 221040 KB Output is correct
36 Correct 105 ms 5236 KB Output is correct
37 Correct 2795 ms 558492 KB Output is correct
38 Correct 2757 ms 558636 KB Output is correct
39 Correct 2873 ms 558688 KB Output is correct
40 Correct 1491 ms 209144 KB Output is correct
41 Correct 80 ms 10484 KB Output is correct
42 Correct 48 ms 4852 KB Output is correct
43 Execution timed out 3068 ms 780532 KB Time limit exceeded
44 Halted 0 ms 0 KB -