很好cdq 使我代码翻转
查看原帖
很好cdq 使我代码翻转
578004
02Ljh楼主2024/1/29 10:53

WA 0pts 悬114514关

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
//#define int long long
#define ull unsigned long long
#define ll long long
#define MAXN 200019
#define WA cerr<<"CCF\n"
#define eps 1e-5
#define none -1145141919
#define pii pair<int,int>
#define Y cout<<"Yes\n"
#define N cout<<"No\n"
#define H cout<<"\n"
#define WH cerr<<"\n"
#define fi first
#define se second
#define C continue
#define For(i,a,b) for(int i=a;i<=b;i++)
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define Rof(i,a,b) for(int i=a;i>=b;--i)
#define ROF(i,a,b) for(int i=a;i>b;--i)
#define G(i) for(auto i:)
#define VG(i,p) for(int i=0;i<pq[p].size();i++)
#define pb push_back
#define pk pop_back
#define WR(x) cerr<<x<<"\n"
const int MOD=1e9+7;
void MD(int &x) { while(x<0) x+=MOD; x%=MOD; return ; }
#define lowbit(x) x&-x
int n,k;
int tr[MAXN]; int as[MAXN];
void add(int ps,int val) { for(int i=ps;i<=k;i+=lowbit(i)) { tr[i]+=val; } return ; }
int Q_(int ps) { int rt=0; for(int i=ps;i>0;i-=lowbit(i)) { rt+=tr[i]; } return rt; }
int Q(int l,int r) { return Q_(r)-Q_(l-1); }
struct lxy{int a,b,c,id;}a[MAXN];
lxy tmp[MAXN];// pii MP(lxy x) { return -+make_pair(x.b,x.c); }
bool cmp(lxy x,lxy y) { return (x.a==y.a)?((x.b==y.b)?(x.c<=y.c):(x.b<=y.b)):(x.a<=y.a); }
bool cmpb(lxy x,lxy y) { return ((x.b==y.b)?(x.c<=y.c):(x.b<=y.b)); }
void cdq(int l,int r) 
{
	if(l==r) return ;
	int mid=(l+r)/2; cdq(l,mid); cdq(mid+1,r);
	int cl=l,cr=mid+1,c1=l;
	For(i,l,r) tmp[i]=a[i]; sort(tmp+l,tmp+mid+1,cmpb); sort(tmp+mid+1,tmp+r+1,cmpb);
	cl=l,cr=mid+1; vector<int> de; de.clear();
	while(cr<=r) 
	{
		if(tmp[cl].b<=tmp[cr].b&&cl<=mid) { add(tmp[cl].c,1); de.pb(tmp[cl].c); ++cl; C; }
		else { as[tmp[cr].id]+=Q_(tmp[cr].c); ++cr; }
	}
	for(auto i:de) add(i,-1);
	//For(i,l,r) a[i]=tmp[i];
	return ;
} int bx[MAXN];
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k; For(i,1,n) { cin>>a[i].a>>a[i].b>>a[i].c; a[i].id=i; }
    sort(a+1,a+1+n,cmp);
	cdq(1,n); //FOR(i,0,n) cout<<as[i]<<"\n";
	For(i,1,n) bx[as[i]]++; FOR(i,0,n) cout<<bx[i]<<"\n";
    return 0;
}
2024/1/29 10:53
加载中...