题目大意

给出一个长度为n的序列(每个值的值域在[1,109]),先硬点其中s个点的值,然后再给出m个区间,每个区间给出k个位置表示这k个位置上的数严格大于此区间剩下的数,求任意一种合法的序列。

分析

首先分析题目应该不难发现可以构造一个差分约束系统(说得我看出来了似的 ), 可以列出很多很多个形如 x i − x j ≥ v xi − xj ≥ v xi−xj≥v的式子,然后根据这些式子跑一边拓扑,更新一遍答案就ok辽。那么如果这样的复杂度仅连边的时间复杂度就超过了 O ( N 2 ) O(N^2) O(N2)。
然后考虑优化连边,可以发现其中许多连边都是一整段向一个点连去的,所以我们可以考虑先将这些部分看成整体连向一个新点,然后再由新点连向该区间的k个点。所以就有了其中一档部分分是分块的。
再考虑优化,我们可以将这些区间放在线段树上做,那么在线段树上一定存在相对应的 l o g n logn logn个区间,然后总的时间复杂度就是 O ( k l o n g n ) O(k long n) O(klongn),然后因为这题打起来很舒服,没什么细节,所以就打个题解。

Code

#include <cstdio>
#include <queue>
using namespace std;const int N = 1e5 + 10;
struct Edge{int to,next,val;
} f[N << 4];
int n,s,m,head[N << 3],cnt,id[N],dis[N << 3],tot,v[N << 3],rd[N << 3];
queue <int> q;int read()
{int x = 0,w = 1;char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-') w = -1; ch = getchar();}while (ch >= '0' && ch <= '9') {x = x * 10 + ch -'0'; ch = getchar();}return x * w;
}int max(int a,int b) {return a > b ? a : b;}void insert(int u,int v,int w)
{f[++ cnt].to = v;f[cnt].next = head[u];f[cnt].val = w;head[u] = cnt;
}void build(int x,int l,int r)
{tot = max(tot,x);if (l == r) {id[l] = x; return;}int mid = l + r >> 1;build(x << 1,l,mid),build(x << 1 | 1,mid + 1,r);insert(x << 1,x,0),insert(x << 1 | 1,x,0),++++ rd[x];
}void add(int x,int l_,int r_,int l,int r)
{if (l_ >= l && r_ <= r) {insert(x,tot,0); rd[tot] ++; return;}int mid = l_ + r_ >> 1;if (l <= mid) add(x << 1,l_,mid,l,r);if (r > mid) add(x << 1 | 1,mid + 1,r_,l,r);
}int main()
{freopen("web.in","r",stdin);freopen("web.out","w",stdout);n = read(),s = read(),m = read();build(1,1,n);for (int i = 1; i <= tot; i ++) dis[i] = 1;for (int i = 1,u; i <= s; i ++) u = read(),dis[id[u]] = read();for (int i = 1,l,r,k; i <= m; i ++){++ tot;dis[tot] = 1;l = read(),r = read(),k = read();v[0] = l - 1;v[k + 1] = r + 1;for (int i = 1; i <= k; i ++) v[i] = read();for (int i = 1; i <= k + 1; i ++)if (v[i] - 1 >= v[i - 1] + 1) add(1,1,n,v[i - 1] + 1,v[i] - 1);for (int i = 1; i <= k; i ++) insert(tot,id[v[i]],1),rd[id[v[i]]] ++;}for (int i = 1; i <= tot; i ++)if (!rd[i]) q.push(i);while (!q.empty()){int u = q.front();q.pop();for (int i = head[u]; i; i = f[i].next)if (rd[f[i].to]){rd[f[i].to] --;dis[f[i].to] = max(dis[f[i].to],dis[u] + f[i].val);if (!rd[f[i].to]) q.push(f[i].to);}}printf("Possible\n");for (int i = 1; i <= n; i ++) printf("%d ",dis[id[i]]);return 0;
}

JZOJ6411. 【NOIP2019模拟11.06】上网相关推荐

  1. Interview:算法岗位面试—11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码、项目考察、比赛考察、图像算法的考察等

    Interview:算法岗位面试-11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码.项目考察.比赛考察.图像算法的考察等 导读:该公司是在同济某次大型招聘会上投的,当时和HR聊了半个多 ...

  2. A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)

    A. [2021.1.29多校省选模拟11]最大公约数 这是一个杜教筛的经典题目,最后我们只需要筛一下1∗xμ(x)1*x\mu(x)1∗xμ(x)这个函数的前缀和即可,然后看到有111这个函数,我们 ...

  3. VMware 12安装Mac OS X 10.11解决上网的问题

    VMware 12安装Mac OS X 10.11&解决上网的问题 参考文章: (1)VMware 12安装Mac OS X 10.11&解决上网的问题 (2)https://www. ...

  4. Daily Report 2012.11.06 刘宇翔

    今天对李忠修改过的match函数进行测试,修正bug,并进行优化. 将中文分词方法加入到算法中,提高了算法的精确度. 但中文分词方法加入到算法后,出现在一些新问题,对新出现的问题进行了修正和优化. 测 ...

  5. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  6. jzoj2702. 探险jzoj3917. 【NOIP2014模拟11.2A组】福慧双修

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

  7. 【NOIP2011模拟11.1】钓鱼

    [NOIP2011模拟11.1]钓鱼 Description 我们把钓鱼的过程放在坐标系里来考虑.图中蓝色的点为船,初始时它的坐标记为(Ax,y).河深为y,河宽为x.某个时刻会从左边界或右边界游出来 ...

  8. 【NOIP2015模拟11.3晚】JZOJ7月31日提高组T1 次芝麻

    [NOIP2015模拟11.3晚]JZOJ7月31日提高组T1 次芝麻 题目 题解 题意 分析 Code 题目 题解 题意 给出两个数 x x x, y y y 每次操作会将小的数乘2,大的数减去小的 ...

  9. jozj5945. 【NOIP2018模拟11.02】昆特牌

    5945. [NOIP2018模拟11.02]昆特牌 Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆 ...

最新文章

  1. asp.net关于kindeditor 上传图片出现服务器故障的解决办法
  2. Android --- Gradle是什么?
  3. csdn编辑器模板2
  4. 小米redmi_99.9元!Redmi首款智能手环评测:能“打赢”小米手环5吗?
  5. Confluence 6 索引支持的语言并进行修改
  6. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
  7. Flask Jinja2 模板中的变量和过滤器
  8. pcie16x能插1x的卡嘛?_5G手机插4G卡,在没有5G信号的地方,跟4G手机的网速一样吗?...
  9. 产品总监的日常:管好团队必须先“正三观”
  10. 是什么影响了数据库索引选型?
  11. 七牛云上传截图后的base64位遇到的问题总结
  12. PAT 乙级 1043. 输出PATest(20) Java版
  13. 冰桶算法,优质资源稳守宝座
  14. 在SOLIDWORKS中如何建立基准面
  15. TileMap大型地图网格属性设置
  16. 基于django的轻量级CMS Mezzanine搭建笔记
  17. 中级会计 科学计算机,听说中级会计机考系统计算器你还不会使用?还不快点关注...
  18. 《C语言程序设计》江宝钏主编-习题1-6-解方程
  19. BS和CS架构,软件开发的瀑布模型,快速原型模型、螺旋模型、敏捷开发、软件测试分类,测试的分类和理解
  20. 实验A---- ADFA的可判定性

热门文章

  1. 023_泛型檫除的实例
  2. 招聘 | 百度-文心一言-核心算法岗位-大语言模型-校招/社招
  3. Linux内存管理、伙伴系统(buddy system)等知识点
  4. Bulma中文文档地址
  5. 使用 Canonical MAAS 部署 openEuler 测试
  6. 算法:深度优先和广度优先(DFS,BFS)
  7. 微信小程序购物车模块(缓存相关知识点)
  8. tensorflow之神经网络层:Dense,dense,Dropout,dropout
  9. CSP-J2021第一轮C++试题第一道完善程序题详解
  10. 本地连接不见了的分析及解决方法