离线处理+扫描线。题意很容易转化:若干个矩形形成并集,询问一些点是否在并集中?

官方题解不是这样做的....那种做法效率更高,暂时还不会。我这样是4500ms G++过的,C++TLE......

区间加上某值,询问单点值,可以用树状数组。用线段树可能常数较大导致TLE。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi = acos(-1.0), eps = 1e-;
void File()
{
freopen("D:\\in.txt", "r", stdin);
freopen("D:\\out.txt", "w", stdout);
}
inline int read()
{
char c = getchar(); while (!isdigit(c)) c = getchar();
int x = ;
while (isdigit(c)) { x = x * + c - ''; c = getchar(); }
return x;
} int T, n, ps, pq, v[], c[ + ];
int A[ + ], sz;
struct Seg { int x, y1, y2, f; }s[ + ]; int ns;
struct Quary { int x, y, id; }q[ + ]; int nq;
int ans[ + ]; int lowbit(int x) { return x&(-x); }
void add(int p, int val) { while (p <= sz) c[p] = c[p] + val, p = p + lowbit(p); }
int sum(int p) { int r = ; while (p > ) r = r + c[p], p = p - lowbit(p); return r; }
void update(int L, int R, int val) { add(L, val); add(R + , -val); } void AddSeg(int l, int r, int L, int R)
{
s[ns].x = l, s[ns].y1 = L, s[ns].y2 = R, s[ns].f = , ns++;
s[ns].x = r, s[ns].y1 = L, s[ns].y2 = R, s[ns].f = -, ns++;
A[sz++] = L, A[sz++] = R;
} bool cmp(Seg a, Seg b) { if (a.x == b.x) return a.f > b.f; return a.x < b.x; }
bool cmp2(Quary a, Quary b) { return a.x < b.x; } void get()
{
int x = lower_bound(A, A + sz, q[pq].y) - A; x++;
if (sum(x) > ) ans[q[pq].id] = ; else ans[q[pq].id] = ; pq++;
} void insert()
{
int L = lower_bound(A, A + sz, s[ps].y1) - A; L++;
int R = lower_bound(A, A + sz, s[ps].y2) - A; R++;
update(L, R, s[ps].f); ps++;
} int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &n, &nq);
for (int i = ; i <= n; i++) scanf("%d", &v[i]); ns = ; sz = ;
for (int i = ; i <= n; i++)
{
int l = , r = , L = , R = , w = , b = ;
if (i & ) AddSeg(, v[i], , ); else AddSeg(, , , v[i]);
for (int j = i + ; j <= n; j++)
{
l = r = w; L = R = b;
if (i & ) r = r + v[i]; else R = R + v[i];
if (j & ) r = r + v[j]; else R = R + v[j];
AddSeg(l, r, L, R);
if (j & ) w = w + v[j]; else b = b + v[j];
}
} for (int i = ; i < nq; i++)
{
scanf("%d%d", &q[i].x, &q[i].y); q[i].id = i;
A[sz++] = q[i].y;
} sort(s, s + ns, cmp); sort(q, q + nq, cmp2);
sort(A, A + sz); sz = unique(A, A + sz) - A; ps = , pq = ; memset(c, , sizeof c);
while (pq < nq)
{
if (ps == ns) get();
else
{
if (s[ps].x < q[pq].x) insert();
else if (s[ps].x > q[pq].x) get();
else { if (s[ps].f == ) insert(); else get(); }
}
}
for (int i = ; i < nq; i++) printf("%d", ans[i]); printf("\n");
}
return ;
}

HDU 5741 Helter Skelter的更多相关文章

  1. HDU 5741 Helter Skelter(构造法)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5741 [题目大意] 一个01相间的串,以0开头,给出的序列每个数字表示连续的0的个数或者1的个数, ...

  2. Helter Skelter (扫描线 + 离散化 + 树状数组)

    扫描线:按照其中一个区间的标记为pos,然后左区间标记d为正影响,有区间标记d为负影响,然后根据所有的pos排序.pos从小扫到大,那么对于某一个区间一定会被扫过2次,那么经过2次之后就只剩下中间那一 ...

  3. 2016 Multi-University Training Contest 2

    8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个  α(>=0)乘以 ...

  4. 2016 Multi-University Training Contest 2 solutions BY zimpha

    Acperience 展开式子, \(\left\| W-\alpha B \right\|^2=\displaystyle\alpha^2\sum_{i=1}^{n}b_i^2-2\alpha\su ...

  5. HDU 4169 UVALive 5741 Wealthy Family

    树形背包.DP递推的思路很简单.... 但是由于节点有15万个,先不论空间复杂度,这样开dp数组 dp[150000+10][300+10],如果初始化是memset(dp,-1,sizeof dp) ...

  6. (最小生成树)Jungle Roads -- HDU --1301

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1301 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. 杭电20题 Human Gene Functions

    Problem Description It is well known that a human gene can be considered as a sequence, consisting o ...

  2. hdu 5493 Queue treap实现将元素快速插入到第i个位置

    input T 1<=T<=1000 n 1<=n<=100000 h1 k1 h2 k2 ... ... hn kn 1<=hi<=1e9  0<=ki&l ...

  3. error while loading shared libraries: libseaudit.so.4: cannot open shared object file: Error 40

    安装共享库后要注意共享库路径设置问题, 如下: 1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令 ldconfig命令的用途, 主要是在默认搜寻目录( ...

  4. 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】

    在第一篇文章 项目管理实践教程一.工欲善其事,必先利其器[Basic Tools]发布后,根据大家的回复,我需要向大家说明几个问题: 1.为什么要用VisualSVN Server,而不用Subver ...

  5. CSS3--阴影,渐变,背景图片

    文字阴影.element{ text-shadow:1px 1px 1px #cccccc;}先右再下第一个值:右侧阴影的大小第二个值:下方阴影的大小第三个值:模糊距离(阴影从开始变淡到完全消失的距离 ...

  6. cocos2d-x 获得系统语言繁体

    IosLocalUtil.h #ifndef __IOS_LOCALUTIL_H__ #define __IOS_LOCALUTIL_H__ class IosLocalUtil{ public: s ...

  7. python2.7学习记录之二

    一.高级特性 1.切片取前3个元素用L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.如果第一个索引是0可省略.前10个数 每两个取一个L[:10:2],所有数 每5个取一个L[::5 ...

  8. C语言_IP地址解析

    #include<stdio.h> #include<stdlib.h> void main() { unsigned long input_IP; unsigned int ...

  9. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  10. H5的新应用-指定视频的播放进度

    <!DOCTYPE html> <html> <head> <title>指定视频的播放进度</title> <meta http-e ...