二维偏序
题意: 每个物品有两个参数(x,y),问 \(x_i > x_j 且 y_i > y_j\) 成立的 \(j\) 有多少个. 思路: 二维偏序,先对x进行排序,对y离散化,从后到前循环,对点i,树状数组求当前有多少个y比y_i小的,若小于n-i,则说明后面存在y比他大的,且后面的一定x比他大,所以当前这个点能贡献一次答案,然后再在y_i添加一次树状数组 #include<cstring> #include<cstdio> #include<queue> #include<iostream> #include<algorithm> #define ll long long #define pii pair<int,int> using namespace std; const int inf = 0x3f3f3f3f; const int N = 1e5+10; struct node{ int x,y; }a[N]; int n,w[N]; struct bit{ int a[N]; void update(int x,int pos){ for(int i=pos;i<=n;i+=i&(-i)) a[i] += x; } int sum(int pos){ int res = 0; for(int i=pos;i;i-=i&(-i)) res += a[i]; return