loj 6270

Posted limfc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj 6270相关的知识,希望对你有一定的参考价值。

最近(一直)有点(很)蠢

按照区间大小排序做区间包含多少区间的话

只用考虑 左端点比当前左端点小的和右端点比当前右端点大的,因为不可能同时满足

关于K,就在做到K的时候减一下就好了,一直傻逼在这了

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge *i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,MOD=1e9+7;
char *TT,*mo,but[(1<<15)+2];
#define getchar() ((TT==mo&&(mo=((TT=but)+fread(but,1,1<<15,stdin)),TT==mo))?-1:*TT++)
inline int rd() {
    int x,c,f=1;while(!isdigit(c=getchar()))f=c!=‘-‘;x=c-‘0‘;
    while(isdigit(c=getchar()))x=x*10+c-‘0‘;return f?x:-x;
}
const int N=5e5+11;
struct Q{int l,r,id,f;};
int n,q;
int ans[N];
int c[N],d[N];
inline void add(int*x,int y){for(;y<=n;y+=y&-y)++x[y];}
inline int ask(int*x,int y){int r=0;for(;y;y^=y&-y)r+=x[y];return r;}
vector<pii> a[N];
vector<Q> b[N];
int main(){
#ifdef flukehn
	freopen("test.txt","r",stdin);
#endif
	n=rd(),q=rd();
	rep(i,1,n){
		int l=rd(),r=rd();
		a[r-l+1].pb(mp(l,r));
	}
	int tc=0;
	rep(i,1,q){
		int l=rd(),r=rd(),K=rd();
		if(r-l>=K){
			b[K].pb((Q){l,r,i,-1});
			b[r-l+1].pb((Q){l,r,i,1});
		}
	}
	int cnt=0;
	rep(i,1,n){
		for(vector<pii>::iterator it=a[i].begin();it!=a[i].end();++it){
			add(c,it->fi),add(d,n-it->se+1);
			++cnt;
		}
		for(vector<Q>::iterator it=b[i].begin();it!=b[i].end();++it){
			ans[it->id]+=it->f*(cnt-ask(c,it->l-1)-ask(d,n-it->r));
		}
	}
	rep(i,1,q)printf("%d\n",ans[i]);
}

  

以上是关于loj 6270的主要内容,如果未能解决你的问题,请参考以下文章

Loj 6285. 数列分块入门 9

loj#2076. 「JSOI2016」炸弹攻击 模拟退火

loj#6281. 数列分块入门 5

loj#2071. 「JSOI2016」最佳团体

网络流 24 题汇总(LOJ 上只有 22 题???)

Loj 6280 数列分块入门 4