Submission #926938

#TimeUsernameProblemLanguageResultExecution timeMemory
926938AiperiiiExamination (JOI19_examination)C++14
100 / 100
2419 ms221828 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
#define int long long
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace __gnu_pbds; 
using namespace std;
#define ordered_set tree< pair <int,int> , null_type, less_equal< pair <int,int> >, rb_tree_tag, tree_order_statistics_node_update>
const int N=2e5+5;
ordered_set t[N*4];
void update(int v,int tl,int tr,int ind,int val,int pos){
    if(ind<tl or tr<ind)return;
    if(tl==tr){
        t[v].insert({val,pos});
    }
    else{
        t[v].insert({val,pos});
        int tm=(tl+tr)/2;
        update(v*2,tl,tm,ind,val,pos);
        update(v*2+1,tm+1,tr,ind,val,pos);
    }
}
int get(int v,int tl,int tr,int l,int r,int val){
    if(r<tl or tr<l)return 0;
    if(l<=tl && tr<=r){
        return t[v].size()-t[v].order_of_key({val,0});
    }
    int tm=(tl+tr)/2;
    return get(v*2,tl,tm,l,r,val)+get(v*2+1,tm+1,tr,l,r,val);
}
signed main(){
    ios_base::sync_with_stdio();
    cin.tie(0);cout.tie(0);
    int n,q;
    cin>>n>>q;
    vector <pair <int,int> >v(n);
    vector <int> uni;
    for(int i=0;i<n;i++){
        cin>>v[i].ff>>v[i].ss;
        uni.pb(v[i].ss);
    }
    vector <vector <int> > qu;
    for(int i=0;i<q;i++){
        int x,y,z;
        cin>>x>>y>>z;
        qu.pb({x,y,z,i});
        uni.pb(y);
    }
    sort(all(qu));reverse(all(qu));
    sort(all(v));reverse(all(v));
    sort(all(uni));
    int cnt=0,p=-1;
    map <int,int> val_ind;
    for(int i=0;i<uni.size();i++){
        if(uni[i]!=p){
            cnt++;
            val_ind[uni[i]]=cnt;
        }
        p=uni[i];
    }
    vector <int> ans(q);
    int pos=0;
    for(int i=0;i<q;i++){
        while(pos<n && v[pos].ff>=qu[i][0]){
            update(1,1,cnt,val_ind[v[pos].ss],v[pos].ff+v[pos].ss,pos);
            pos++;
        }
        ans[qu[i][3]]=get(1,1,cnt,val_ind[qu[i][1]],cnt,qu[i][2]);
    }
    
    for(auto x : ans)cout<<x<<"\n";
}
/*
5 4
35 100
70 70
45 15
80 40
20 95
20 50 120
10 10 100
60 60 80
0 100 100
 */

Compilation message (stderr)

examination.cpp: In function 'int main()':
examination.cpp:57:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(int i=0;i<uni.size();i++){
      |                 ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...