解题报告:Codeforces Round #433 (Div. 2) E. Boredom ( 离线处理+树状数组)

题目链接

题意:

n*n的矩阵,有n个不同行列的格子染色,染色的格子两两之间组成的矩阵定义为beautiful。

q组询问,每次给出一个矩阵,询问与它相交的beautiful的矩阵的数目

n,q<=2e5

思路:

每次查询分成九个矩阵,只需要知道各个矩阵中的染色的点数,即可得出答案

其中五个矩阵可以由染色的性质可以直接得出答案

离线处理另外四个即可

代码:

#include

#define lowbit(x) (x&-x)
#define pii pair
#define fi first
#define se second
#define LL long long
const int N = 2e5+10;
using namespace std;

int n,q;
int num[N][9];
struct node{
   int x,y,pos;
}Q[N<<2];
int bit[1<<20];
pii P[N];

inline LL C2(int x){return 1LL * x * (x-1) / 2 ;}
void add(int x){
   while(x<=n){
      ++bit[x];
      x+=lowbit(x);
   }
}

int query(int x){
   int res = 0;
   while(x){
      res += bit[x];
      x -= lowbit(x);
   }return res;
}

int main()
{
   scanf("%d%d",&n,&q);
   for(int i=1,x;i<=n;++i){
      scanf("%d",&x);
      P[i-1] = pii(i,x);
   }for(int i=0,l,d,r,u,j=0,k;i>= 2;LL sum = C2(n);
   for(int i=0;i



你可能感兴趣的:(数据结构)