답안 #1078665

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1078665 2024-08-28T03:42:47 Z doducanh Examination (JOI19_examination) C++14
100 / 100
2250 ms 169064 KB
///breaker
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx")
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<pair<int,int>, null_type,less<pair<int,int> >, rb_tree_tag,tree_order_statistics_node_update>

#define ll long long
#define fi first
#define se second
#define ii pair<int,int>
#define mp make_pair
#define in(x) freopen(x,"r",stdin)
#define out(x) freopen(x,"w",stdout)
#define bit(x,i) ((x>>i)&1)
#define lc (id<<1)
#define rc ((id<<1)^1)
const int maxn=1e5+7;
const int sz=350;
struct fenwick
{
    vector <int> fen;
    int n;
    fenwick(int _n=1e5)
    {
        n=_n;
        fen.assign(n+5,0);
    }
    void add(int pos)
    {
        for(;pos>0;pos-=pos&-pos) fen[pos]++;
        return;
    }
    int get(int pos)
    {
        if (!pos) return 0;
        int ans=0;
        for(;pos<=n;pos+=pos&-pos) ans+=fen[pos];
        return ans;
    }
}t[sz+3];
struct Data
{
    int x,y,z,id;
};
int n,q;
Data a[maxn];
Data qu[maxn];
int ans[maxn];
ordered_set s[2*maxn];
vector<int>vx;
vector<int>vy;
int pos(int x,vector<int>&v)
{
    return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
bool cmp(Data &a,Data &b)
{
    return a.z>b.z;
}
void sol(void){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i].x>>a[i].y;
        vx.push_back(a[i].x);
        vy.push_back(a[i].y);
        a[i].z=a[i].x+a[i].y;
    }
    for(int i=1;i<=q;i++){
        cin>>qu[i].x>>qu[i].y>>qu[i].z;
        qu[i].id=i;
    }
    sort(vx.begin(),vx.end());
    sort(vy.begin(),vy.end());
    vx.erase(unique(vx.begin(),vx.end()),vx.end());
    vy.erase(unique(vy.begin(),vy.end()),vy.end());
    sort(a+1,a+n+1,cmp);
    sort(qu+1,qu+q+1,cmp);
    int l=1;
    for(int i=1;i<=n;i++){
        int pos1=pos(a[i].x,vx);
        int pos2=pos(a[i].y,vy);
        t[(pos1-1)/sz].add(pos2);
        s[pos1].insert({pos2,i});
        if(i<n&&a[i].z==a[i+1].z)continue;
        while(l<=q&&(i==n||qu[l].z>a[i+1].z)){
            if(qu[l].z>a[i].z){
                l++;
                continue;
            }
            pos1=pos(qu[l].x,vx);
            pos2=pos(qu[l].y,vy);
            int tmp=0;
            for(int block=(pos1-1)/sz+1; block<=(vx.size()-1)/sz; block++)tmp+=t[block].get(pos2);
            for(int els=pos1; els<=((pos1-1)/sz+1)*sz; els++)tmp+=s[els].size()-s[els].order_of_key({pos2,0});
            ans[qu[l].id]=tmp;
            l++;
        }
    }
    for(int i=1;i<=q;i++){
        cout<<ans[i]<<"\n";
    }
    return;
}
signed main(void)
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t=1;
    while(t--){
        sol();
    }
    // you should actually read the stuff at the bottom
    return 0;
}
/* stuff you should look for
 * int overflow, array bounds
 * special cases (n=1?)
 * do smth instead of nothing and stay organized
 * WRITE STUFF DOWN
 * DON'T GET STUCK ON ONE APPROACH
 */

Compilation message

examination.cpp: In function 'void sol()':
examination.cpp:98:47: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |             for(int block=(pos1-1)/sz+1; block<=(vx.size()-1)/sz; block++)tmp+=t[block].get(pos2);
      |                                          ~~~~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 158032 KB Output is correct
2 Correct 69 ms 157776 KB Output is correct
3 Correct 71 ms 157708 KB Output is correct
4 Correct 73 ms 157776 KB Output is correct
5 Correct 72 ms 157780 KB Output is correct
6 Correct 72 ms 157776 KB Output is correct
7 Correct 83 ms 158032 KB Output is correct
8 Correct 77 ms 158032 KB Output is correct
9 Correct 75 ms 158072 KB Output is correct
10 Correct 79 ms 158180 KB Output is correct
11 Correct 79 ms 158032 KB Output is correct
12 Correct 75 ms 158032 KB Output is correct
13 Correct 81 ms 158040 KB Output is correct
14 Correct 91 ms 158032 KB Output is correct
15 Correct 90 ms 158180 KB Output is correct
16 Correct 88 ms 158036 KB Output is correct
17 Correct 74 ms 158196 KB Output is correct
18 Correct 73 ms 158036 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1215 ms 168900 KB Output is correct
2 Correct 1144 ms 168960 KB Output is correct
3 Correct 1165 ms 168908 KB Output is correct
4 Correct 726 ms 168900 KB Output is correct
5 Correct 419 ms 169064 KB Output is correct
6 Correct 251 ms 168900 KB Output is correct
7 Correct 1484 ms 169024 KB Output is correct
8 Correct 730 ms 168900 KB Output is correct
9 Correct 956 ms 168904 KB Output is correct
10 Correct 218 ms 168644 KB Output is correct
11 Correct 645 ms 168636 KB Output is correct
12 Correct 271 ms 168648 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1215 ms 168900 KB Output is correct
2 Correct 1144 ms 168960 KB Output is correct
3 Correct 1165 ms 168908 KB Output is correct
4 Correct 726 ms 168900 KB Output is correct
5 Correct 419 ms 169064 KB Output is correct
6 Correct 251 ms 168900 KB Output is correct
7 Correct 1484 ms 169024 KB Output is correct
8 Correct 730 ms 168900 KB Output is correct
9 Correct 956 ms 168904 KB Output is correct
10 Correct 218 ms 168644 KB Output is correct
11 Correct 645 ms 168636 KB Output is correct
12 Correct 271 ms 168648 KB Output is correct
13 Correct 971 ms 168900 KB Output is correct
14 Correct 1087 ms 168988 KB Output is correct
15 Correct 1114 ms 169016 KB Output is correct
16 Correct 664 ms 168900 KB Output is correct
17 Correct 289 ms 168904 KB Output is correct
18 Correct 251 ms 169012 KB Output is correct
19 Correct 992 ms 168928 KB Output is correct
20 Correct 992 ms 168900 KB Output is correct
21 Correct 986 ms 168904 KB Output is correct
22 Correct 222 ms 168820 KB Output is correct
23 Correct 588 ms 168672 KB Output is correct
24 Correct 221 ms 168696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 158032 KB Output is correct
2 Correct 69 ms 157776 KB Output is correct
3 Correct 71 ms 157708 KB Output is correct
4 Correct 73 ms 157776 KB Output is correct
5 Correct 72 ms 157780 KB Output is correct
6 Correct 72 ms 157776 KB Output is correct
7 Correct 83 ms 158032 KB Output is correct
8 Correct 77 ms 158032 KB Output is correct
9 Correct 75 ms 158072 KB Output is correct
10 Correct 79 ms 158180 KB Output is correct
11 Correct 79 ms 158032 KB Output is correct
12 Correct 75 ms 158032 KB Output is correct
13 Correct 81 ms 158040 KB Output is correct
14 Correct 91 ms 158032 KB Output is correct
15 Correct 90 ms 158180 KB Output is correct
16 Correct 88 ms 158036 KB Output is correct
17 Correct 74 ms 158196 KB Output is correct
18 Correct 73 ms 158036 KB Output is correct
19 Correct 1215 ms 168900 KB Output is correct
20 Correct 1144 ms 168960 KB Output is correct
21 Correct 1165 ms 168908 KB Output is correct
22 Correct 726 ms 168900 KB Output is correct
23 Correct 419 ms 169064 KB Output is correct
24 Correct 251 ms 168900 KB Output is correct
25 Correct 1484 ms 169024 KB Output is correct
26 Correct 730 ms 168900 KB Output is correct
27 Correct 956 ms 168904 KB Output is correct
28 Correct 218 ms 168644 KB Output is correct
29 Correct 645 ms 168636 KB Output is correct
30 Correct 271 ms 168648 KB Output is correct
31 Correct 971 ms 168900 KB Output is correct
32 Correct 1087 ms 168988 KB Output is correct
33 Correct 1114 ms 169016 KB Output is correct
34 Correct 664 ms 168900 KB Output is correct
35 Correct 289 ms 168904 KB Output is correct
36 Correct 251 ms 169012 KB Output is correct
37 Correct 992 ms 168928 KB Output is correct
38 Correct 992 ms 168900 KB Output is correct
39 Correct 986 ms 168904 KB Output is correct
40 Correct 222 ms 168820 KB Output is correct
41 Correct 588 ms 168672 KB Output is correct
42 Correct 221 ms 168696 KB Output is correct
43 Correct 1366 ms 168892 KB Output is correct
44 Correct 1383 ms 168936 KB Output is correct
45 Correct 1492 ms 168832 KB Output is correct
46 Correct 914 ms 168904 KB Output is correct
47 Correct 298 ms 168856 KB Output is correct
48 Correct 172 ms 168644 KB Output is correct
49 Correct 2250 ms 168904 KB Output is correct
50 Correct 851 ms 168780 KB Output is correct
51 Correct 1333 ms 168880 KB Output is correct
52 Correct 260 ms 168840 KB Output is correct
53 Correct 886 ms 168620 KB Output is correct