Submission #1273408

#TimeUsernameProblemLanguageResultExecution timeMemory
1273408nthvnExamination (JOI19_examination)C++20
0 / 100
200 ms8804 KiB
#include "bits/stdc++.h"
using namespace std;
#define cerr if(0) cerr
#define fi first
#define se second
#define pii pair<int,int> 
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define pb push_back
#define ll long long
const int N = 2e5+5;
int n,q,tot, fans[N];
struct DATA{
	int x,y,z,id;
	bool operator < (const DATA &o ) const{
		return x> o.x;
	}
	void print(){
		cerr<<x<<" "<<y<<" "<<z<<"\n";
	}
} a[N], t[N];
struct BITREV{
	int bit[N];
	void update(int i, int x){
		for(;i;i-=i&-i) bit[i]+=x;
	}
	int get(int i){
		int ans =0;
		for(;i<=tot;i+=i&-i) ans+= bit[i];
		return ans;
	}
}bit;

void compress(){
	vector<int> X,Y,Z;
	for(int i=1;i<=tot;i++) {
		X.pb(a[i].x), Y.pb(a[i].y), Z.pb(a[i].z);
	}
	sort(all(X));
	sort(all(Y));
	sort(all(Z));
	for(int i=1;i<=tot;i++){
		a[i].x = lower_bound(all(X), a[i].x) - X.begin()+1;
		a[i].y = lower_bound(all(Y), a[i].y) - Y.begin()+1;
		a[i].z = lower_bound(all(Z), a[i].z) - Z.begin()+1;
	}
}

vector<pii> hist;
void mg(int x, int y, int u, int v){
	
	int st= x-1;
	int L= x, R=u;
	
	while(L<=y&&R<=v){
		if(a[L].y>= a[R].y){
			t[++st] = a[L];
			int z= a[L].z;
			if(!a[L].id){
				hist.pb({z,-1});
				bit.update(z,1);
			}
			L++;
		}
		else{
			t[++st] = a[R];
			int z= a[R].z;
			if(a[R].id) fans[a[R].id] += bit.get(z);
			R++;
		}
	}
	while(L<=y){
		t[++st]= a[L++];
	}
	while(R<=v){
		if(a[R].id) fans[a[R].id] += bit.get(a[R].z);
		t[++st]= a[R++];
	}
	cerr<<x<<" "<<y<<" "<<u<<" "<<v<<" "<<L<<" "<<R<<"\n";
	for(int i=x;i<=v;i++) a[i].print();
	cerr<<"__________________\n";
	for(int i=x;i<=v;i++) t[i].print();
	cerr<<"\n\n";
	
	for(int i=x;i<=v;i++) a[i] = t[i];
	while(sz(hist)){
		bit.update(hist.back().fi, hist.back().se);
		hist.pop_back();
	}
}

void dnc(int l, int r){
	if(l==r) return;
	int mid =(l+r)>>1;
	dnc(l,mid);
	dnc(mid+1,r);
	mg(l,mid, mid+1,r);
}

signed main(){
	ios_base::sync_with_stdio(NULL);
	cin.tie(NULL);
	if(fopen("TASK.INP", "r")){
		freopen("TASK.INP", "r", stdin);
		freopen("TASK.OUT", "w", stdout);
	}
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		int x,y; cin>>x>>y;
		a[++tot] = {x,y,x+y,0};
	}
	for(int i=1;i<=q;i++){
		int x,y,z; cin>>x>>y>>z;
		a[++tot] = {x,y,z,i};
	}
	compress();
	cerr<<"A\n";
	for(int i=1;i<=n;i++) a[i].print();
	cerr<<"\nB\n";
	for(int i=n+1;i<=tot;i++) a[i].print();
	sort(a+1,a+tot+1);
	
	cerr<<"\nT\n";
	for(int i=1;i<=tot;i++) a[i].print();
	cerr<<"\n\n";
	
	dnc(1,tot);
	
	for(int i=1;i<=q;i++) cout<<fans[i]<<"\n";
}

Compilation message (stderr)

examination.cpp: In function 'int main()':
examination.cpp:104:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  104 |                 freopen("TASK.INP", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
examination.cpp:105:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |                 freopen("TASK.OUT", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...