题目

link

求偶数子序列

满足

的个数。

分析

首先, 我们先把每一对a[i] + a[j]存起来, 这样就可以把题目的偶数个条件无视了。
设 T[i,j] = a[i] + a[j]; 因为我们是要求序列个数, 所以对于 [i,j]区间, 我们
要找出 [i,j] 内有多少对满足 T[x,y] < T[i,j] 的。
把 (i,j)想成坐标系的点, 那么上面求的就是 平面矩形 {[i,i],[j,j]} 中有多少点。
利用前缀和 和矩形相减就可以快速得出了。所以用二维的树状数组维护就有了。

Code

取余是一个特殊值, 可以直接用unsigned更加简便。

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const LL MOD = 1LL<<32;
const int maxn = 500 + 31; struct Point {
int x, y;
LL sum; Point(int _x, int _y, LL _s):\
x(_x),y(_y),sum(_s){} bool operator < (const Point a) const {
if(sum == a.sum) {
return x == a.x ? y < a.y : x < a.x;
} else return sum < a.sum;
}
}; vector<Point> Tmp;
LL Num[maxn][maxn];
LL A[maxn], B[maxn]; ///BIT
int lowbit(int x) { return x&(-x); }
LL Sum(int x, int y) {
LL ret = 0;
int xx = x;
while(xx > 0) {
int yy = y;
while(yy > 0)
{
ret = (ret + Num[xx][yy]) % MOD;
yy -= lowbit(yy);
}
xx -= lowbit(xx);
}
return ret;
}
void Add(int x, int y, LL Val) {
int xx = x;
while(xx < maxn)
{
int yy = y;
while(yy < maxn)
{
Num[xx][yy] = (Num[xx][yy] + Val) % MOD;
yy += lowbit(yy);
}
xx += lowbit(xx);
}
} int main() {
//cout << MOD <<endl;
int t, n;
scanf("%d",&t);
for(int kase = 1; kase <= t; ++kase)
{
Tmp.clear();
memset(Num,0,sizeof(Num));
scanf("%d",&n);
for(int i = 0; i < n; ++i)
scanf("%lld",A+i);
for(int i = 0; i < n; ++i)
for(int j = i+1; j < n; ++j)
{
Tmp.push_back(Point(i+1,j+1,(A[i]+A[j])%MOD));
}
sort(Tmp.begin(), Tmp.end());
LL Ans = 0;
for(int i = 0; i < Tmp.size(); ++i)
{
Point t = Tmp[i];
LL ss = (Sum(t.y-1,t.y-1) - Sum(t.x,t.y-1) + MOD) % MOD;
ss = (ss - Sum(t.y-1,t.x) + Sum(t.x,t.x) + MOD) % MOD;
ss = (ss+1) % MOD;
Ans = (Ans + ss) % MOD;
Add(t.x,t.y,ss);
}
//Ans %= MOD;
printf("Case %d: %lld\n",kase, Ans);
}
return 0;
}

Light OJ 1343 - Aladdin and the Black Stones的更多相关文章

  1. Light OJ 1341 Aladdin and the Flying Carpet Pollard_rho整数分解+DFS

    进入a b 多少努力p, q 使p*q == a && p < q && p >= b 直接大整数分解 然后dfs所有可能的解决方案劫持 #include ...

  2. Light OJ 1341 Aladdin and the Flying Carpet

    题意:求大于b的a的因数对有几组.例10  2结果为{2,5},12 2结果为{2,6}{3,4}-----不反复 解一:分解质因数+DFS #include <iostream> #in ...

  3. Light OJ 1114 Easily Readable 字典树

    题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...

  4. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  5. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  6. Light OJ 1316 A Wedding Party 最短路+状态压缩DP

    题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...

  7. light oj 1007 Mathematically Hard (欧拉函数)

    题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...

  8. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  9. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

随机推荐

  1. JAVA之列表

      增: import java.util.ArrayList; import java.util.List; public class T{ public static void main(Stri ...

  2. Mint-UI组件 MessageBox为prompt 添加判断条件

    Mint-UI 的Message Box 是prompt类型时,可以添加正则判断或者function判断条件.具体可以查看Mint-UI源码. 添加正则判断条件: MessageBox({ $type ...

  3. 【CF1063F】String Journey 哈希

    题目大意 给你一个字符串 \(s\),让你找出最大的 \(k\),满足:能从 \(s\) 中选出 \(k\) 个不重叠的字符串 \(t_1,t_2,\ldots,t_k\),且 \(\forall i ...

  4. 【CF1146】Forethought Future Cup - Elimination Round

    Forethought Future Cup - Elimination Round 窝也不知道这是个啥比赛QwQ A. Love "A" 给你一个串,你可以删去若干个元素,使得最 ...

  5. v-for 循环element-ui菜单

    vue 使用了element-ui的菜单组件, 这个组件的el-menu-item项上,有一个属性index,值是字符串类型, 在使用v-for的index时,它是一个数值型,所以如果直接写index ...

  6. Flex布局【弹性布局】学习

    先让我们看看在原来的学习中遇到的问题 之前在软件工程的大作业中,自己从零开始学习如何开发一个网站,从页面,到后台,当然数据库是大二的必修课 在学习如何编写一个静态页面的时候,完全是自学,自己摸索,所以 ...

  7. 阿里云Redis开发规范

    转自: https://yq.aliyun.com/articles/531067 摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计.命令使用.客户端使用.相关工具等方面进行说明,通过本 ...

  8. passat product list

    s end

  9. Dell台式机Window10恢复重装window7步骤

    1.开机页面出现Dell标识时,连续点击F2 2.进入bois页面,选择boot ,将光标移动到USB启动盘符位置, 3.按 - 号,将 USB Srorage Device 改为第一启动项,F10保 ...

  10. [面试]死锁-最简单的死锁demo

    死锁 什么是死锁 (百度百科) 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁 ...