Submission #616119

# Submission time Handle Problem Language Result Execution time Memory
616119 2022-07-31T22:18:55 Z Iwanttobreakfree Examination (JOI19_examination) C++
2 / 100
3000 ms 31608 KB
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <set>
using namespace std;
#define pii pair<int,int>
unordered_map<int,int> mp_m,mp_i,mp_a,av;
vector<int> BIT,cnt;
int sz=400,ans=0;
int next(int x){return x + (x&(-x));}
int par(int x){return x - (x&(-x));}
bool cmp(pair<int,pair<pii,pii>>& a,pair<int,pair<pii,pii>>& b){
    if(a.first!=b.first)return a.first<b.first;
    return a.second.first.second<b.second.first.second;
}
int bin_find(int x,vector<int>& v){
    int l=0,r=v.size()-1,ans=v.size();
    while(l<=r){
        int mid=(r+l)/2;
        if(v[mid]<x)l=mid+1;
        else {
            ans=mid;
            r=mid-1;
        }
    }
    return ans;
}
void pupd(int x,int k){
    //cout<<x<<' '<<k<<'\n';
    for(int i=x;i<BIT.size();i=next(i))BIT[i]+=k;
}
int sum(int x){
    int ans=0;
    for(int i=x;i>0;i=par(i)){
        ans+=BIT[i];
        //cout<<i<<' '<<BIT[i]<<'\n';
    }
    return ans;
}
int val(int l,int r){
    return sum(r)-sum(l);
}
void add(int i,vector<vector<int>>& g,vector<int>& exam,int q){
    //cout<<i<<' ';
    for(int x:g[i]){
        cnt[x]++;
        if(cnt[x]==2){
            if(q<3001)pupd(mp_a[exam[x]]+1,+1);
            ans++;
        }
    }
    //cout<<ans<<' '<<'\n';
}
void del(int i,vector<vector<int>>& g,vector<int>& exam,int q){
    //cout<<i<<' ';
    for(int x:g[i]){
        if(cnt[x]==2){
            if(q<3001)pupd(mp_a[exam[x]]+1,-1);
            ans--;
        }
        cnt[x]--;
    }
    //cout<<ans<<'\n';
}
vector<vector<int>> math,info;
void MO(int q,vector<int>& m,vector<int>& in,vector<int>& av,vector<int>& exam){
    int x,y,z;
    vector<pair<int,pair<pii,pii>>> qu(q);
    vector<int> answer(q);
    for(int i=0;i<q;i++){
        cin>>x>>y>>z;
        //cout<<x<<' '<<y<<' '<<z<<'\n';
        qu[i]={x/sz,{{x,y},{z,i}}};
    }
    sort(qu.begin(),qu.end(),cmp);
    int l_math=m.size(),l_info=in.size();
    m.push_back(1e9+7);
    in.push_back(1e9+7);
    for(int i=0;i<q;i++){
        int min_math=qu[i].second.first.first,min_info=qu[i].second.first.second,min_av;
        if(q<3001)min_av=bin_find(qu[i].second.second.first,av);
        else min_av=0;
        //cout<<min_math<<' '<<min_info<<'\n';
        if(min_av==av.size()){
            answer[qu[i].second.second.second]=0;
            continue;
        }
        //cout<<l_math<<' '<<l_info<<'\n';
        while(l_math>0&&m[l_math]>min_math){
            l_math--;
            add(l_math,math,exam,q);
        }
        while(l_math+1<m.size()&&m[l_math]<min_math){
            del(l_math,math,exam,q);
            l_math++;
        }
        //cout<<l_math<<' '<<l_info<<'\n';
        while(l_info>0&&in[l_info]>min_info){
            l_info--;
            //cout<<l_info<<' ';
            add(l_info,info,exam,q);
        }
        //cout<<l_info<<' ';
        while(l_info+1<in.size()&&in[l_info]<min_info){
            del(l_info,info,exam,q);
            l_info++;
        }
        //cout<<l_math<<' '<<l_info<<' '<<qu[i].second.second<<' '<<ans<<' '<<sum(min_av)<<'\n';
        answer[qu[i].second.second.second]=ans-sum(min_av);
    }
    for(int i=0;i<q;i++)cout<<answer[i]<<'\n';
}
int main(){
    //cin.tie(0);
    //cout.tie(0);
    //ios::sync_with_stdio(false);
    int n,q,x,y;
    cin>>n>>q;
    set<int> m,in,av;
    cnt=vector<int>(n);
    vector<int> exam_math(n),exam_info(n),exam_av(n),a,b,c;
    for(int i=0;i<n;i++){
        cin>>x>>y;
        m.insert(x);
        in.insert(y);
        av.insert((x+y));
        exam_math[i]=x;
        exam_info[i]=y;
        exam_av[i]=(x+y);
    }
    mp_m.reserve(131072);
    mp_i.reserve(131072);
    mp_a.reserve(131072);
    int cntm=0,cnti=0,cnta=0;
    for(int x:m){
        mp_m[x]=cntm;
        cntm++;
        a.push_back(x);
    }
    for(int x:in){
        mp_i[x]=cnti;
        cnti++;
        b.push_back(x);
    }
    for(int x:av){
        mp_a[x]=cnta;
        cnta++;
        c.push_back(x);
    }
    BIT=vector<int> (cnta+1);
    math=vector<vector<int>> (cntm,vector<int>());
    info=vector<vector<int>> (cnti,vector<int>());
    for(int i=0;i<n;i++){
        math[mp_m[exam_math[i]]].push_back(i);
        info[mp_i[exam_info[i]]].push_back(i);
    }
    MO(q,a,b,c,exam_av);
}

Compilation message

examination.cpp: In function 'void pupd(int, int)':
examination.cpp:31:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(int i=x;i<BIT.size();i=next(i))BIT[i]+=k;
      |                 ~^~~~~~~~~~~
examination.cpp: In function 'void MO(int, std::vector<int>&, std::vector<int>&, std::vector<int>&, std::vector<int>&)':
examination.cpp:85:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         if(min_av==av.size()){
      |            ~~~~~~^~~~~~~~~~~
examination.cpp:94:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |         while(l_math+1<m.size()&&m[l_math]<min_math){
      |               ~~~~~~~~^~~~~~~~~
examination.cpp:105:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |         while(l_info+1<in.size()&&in[l_info]<min_info){
      |               ~~~~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3412 KB Output is correct
3 Correct 2 ms 3412 KB Output is correct
4 Correct 2 ms 3412 KB Output is correct
5 Correct 3 ms 3412 KB Output is correct
6 Correct 2 ms 3412 KB Output is correct
7 Correct 129 ms 4712 KB Output is correct
8 Correct 127 ms 4716 KB Output is correct
9 Correct 125 ms 4692 KB Output is correct
10 Correct 79 ms 4324 KB Output is correct
11 Correct 77 ms 4320 KB Output is correct
12 Correct 48 ms 3668 KB Output is correct
13 Correct 137 ms 4708 KB Output is correct
14 Correct 123 ms 4692 KB Output is correct
15 Correct 123 ms 4720 KB Output is correct
16 Correct 228 ms 4324 KB Output is correct
17 Correct 221 ms 4308 KB Output is correct
18 Correct 49 ms 3668 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1805 ms 31576 KB Output is correct
2 Correct 1615 ms 31580 KB Output is correct
3 Correct 1640 ms 31608 KB Output is correct
4 Correct 611 ms 22616 KB Output is correct
5 Execution timed out 3099 ms 22076 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1805 ms 31576 KB Output is correct
2 Correct 1615 ms 31580 KB Output is correct
3 Correct 1640 ms 31608 KB Output is correct
4 Correct 611 ms 22616 KB Output is correct
5 Execution timed out 3099 ms 22076 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3412 KB Output is correct
2 Correct 2 ms 3412 KB Output is correct
3 Correct 2 ms 3412 KB Output is correct
4 Correct 2 ms 3412 KB Output is correct
5 Correct 3 ms 3412 KB Output is correct
6 Correct 2 ms 3412 KB Output is correct
7 Correct 129 ms 4712 KB Output is correct
8 Correct 127 ms 4716 KB Output is correct
9 Correct 125 ms 4692 KB Output is correct
10 Correct 79 ms 4324 KB Output is correct
11 Correct 77 ms 4320 KB Output is correct
12 Correct 48 ms 3668 KB Output is correct
13 Correct 137 ms 4708 KB Output is correct
14 Correct 123 ms 4692 KB Output is correct
15 Correct 123 ms 4720 KB Output is correct
16 Correct 228 ms 4324 KB Output is correct
17 Correct 221 ms 4308 KB Output is correct
18 Correct 49 ms 3668 KB Output is correct
19 Correct 1805 ms 31576 KB Output is correct
20 Correct 1615 ms 31580 KB Output is correct
21 Correct 1640 ms 31608 KB Output is correct
22 Correct 611 ms 22616 KB Output is correct
23 Execution timed out 3099 ms 22076 KB Time limit exceeded
24 Halted 0 ms 0 KB -