제출 #370874

#제출 시각아이디문제언어결과실행 시간메모리
370874kimbj0709Examination (JOI19_examination)C++14
100 / 100
825 ms54896 KiB
#include <bits/stdc++.h> using namespace std; #define maxn 400050 #define f first #define s second void updatee(int b,int c,vector<int> &fenwick){ int temp = b+1; //cout << "YES" << endl; while(temp<fenwick.size()){ fenwick[temp] += c; temp += temp & (-temp); } } int getsum(int a,int b,vector<int> &fenwick){ int temp = b+1; int total = 0; while(temp!=0){ total += fenwick[temp]; temp -= temp & (-temp); } int idk = a; while(idk!=0){ total -= fenwick[idk]; idk -= idk & (-idk); } return total; } vector<pair<int,int> > nums; vector<vector<int> > vals(maxn); vector<vector<int> > segs(maxn); void build(int node,int start,int end){ for(int i=start;i<=end;i++){ vals[node].push_back(nums[i].s); segs[node].push_back(0); } segs[node].push_back(0); sort(vals[node].begin(),vals[node].end()); if(start==end){ return; } int mid = (start+end)/2; build(node*2+1,start,mid); build(node*2+2,mid+1,end); } void update(int node,int start,int end,int val1,int val2){ int pos = lower_bound(vals[node].begin(),vals[node].end(),val2)-vals[node].begin(); updatee(pos,1,segs[node]); assert(vals[node][pos]==val2); if(start==end){ return; } int mid = (start+end)/2; if((val1<nums[mid].f)||(val1==nums[mid].f&&val2<=nums[mid].s)){ update(node*2+1,start,mid,val1,val2); } else{ update(node*2+2,mid+1,end,val1,val2); } } int query(int node,int start,int end,int val1,int val2){ if(nums[end].f<val1){ return 0; } if(nums[start].f>=val1){ if(val2>vals[node][vals[node].size()-1]){ return 0; } int pos = upper_bound(vals[node].begin(),vals[node].end(),val2-1)-vals[node].begin(); //cout << pos << " " << vals[node][pos] << " " << val2 << "--\n"; return getsum(pos,vals[node].size()-1,segs[node]); } int mid = (start+end)/2; return query(node*2+1,start,mid,val1,val2)+query(node*2+2,mid+1,end,val1,val2); } int32_t main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,q; cin >> n >> q; int a,b,c; vector<pair<int,pair<int,int> > > vect1; vector<pair<int,pair<int,pair<int,int> > > > queries; for(int i=0;i<n;i++){ cin >> a >> b; vect1.push_back({a+b,{a,b}}); nums.push_back({a,b}); } sort(nums.begin(),nums.end()); vector<int> ans(q); for(int i=0;i<q;i++){ cin >> a >> b >> c; queries.push_back({c,{a,{b,i}}}); } build(0,0,vect1.size()-1); sort(vect1.begin(),vect1.end()); sort(queries.begin(),queries.end()); reverse(queries.begin(),queries.end()); reverse(vect1.begin(),vect1.end()); int currpos = 0; for(int i=0;i<queries.size();i++){ while(currpos<vect1.size()&&vect1[currpos].f>=queries[i].f){ update(0,0,vect1.size()-1,vect1[currpos].s.f,vect1[currpos].s.s); currpos++; } int currans = query(0,0,vect1.size()-1,queries[i].s.f,queries[i].s.s.f); ans[queries[i].s.s.s] = currans; } /*for(auto k:vals[1]){ cout << k << " "; } cout << endl;*/ for(auto k:ans){ cout << k << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

examination.cpp: In function 'void updatee(int, int, std::vector<int>&)':
examination.cpp:9:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |   while(temp<fenwick.size()){
      |         ~~~~^~~~~~~~~~~~~~~
examination.cpp: In function 'int32_t main()':
examination.cpp:100:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, std::pair<int, int> > > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |   for(int i=0;i<queries.size();i++){
      |               ~^~~~~~~~~~~~~~~
examination.cpp:101:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |     while(currpos<vect1.size()&&vect1[currpos].f>=queries[i].f){
      |           ~~~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...