1.[TJOI2018]数学计算

傻逼题

会发现符合线段树分治的特点

每个数的操作范围都是连续的

然后就等于区间修改了

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define ll long long
#define me(x) memset(x,0,sizeof(x))
#define mid ((h+t)>>1)
namespace IO
{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,C=-;
template<class T>void wer(T x)
{
if (x<) sr[++C]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++C]=z[Z],--Z);
}
IL void wer1()
{
sr[++C]=' ';
}
IL void wer2()
{
sr[++C]='\n';
}
template<class T>IL void maxa(T &x,T y) {if (x<y) x=y;}
template<class T>IL void mina(T &x,T y) {if (x>y) x=y;}
template<class T>IL T MAX(T x,T y){return x>y?x:y;}
template<class T>IL T MIN(T x,T y){return x<y?x:y;}
};
using namespace IO;
int n,mo;
const int N=2e5;
int s[N],t[N];
struct sgt{
ll lazy[N*];
void clear()
{
rep(i,,N*-) lazy[i]=;
}
void change(int x,int h,int t,int h1,int t1,int k)
{
if (h1<=h&&t<=t1)
{
(lazy[x]*=k)%=mo; return;
}
if (h1<=mid) change(x*,h,mid,h1,t1,k);
if (mid<t1) change(x*+,mid+,t,h1,t1,k);
}
ll query(int x,int h,int t,int pos,ll k)
{
(k*=lazy[x])%=mo;
if (h==t) return k;
if (pos<=mid) return query(x*,h,mid,pos,k);
else return query(x*+,mid+,t,pos,k);
}
}S;
int main()
{
int T;
read(T);
rep(tt,,T)
{
read(n); read(mo); me(s); me(t);
int kk,x;
rep(i,,n)
{
read(kk); read(x);
if (kk==)
{
s[i]=x; t[i]=n;
} else t[x]=i-;
}
S.clear();
rep(i,,n)
if (t[i])
S.change(,,n,i,t[i],s[i]);
rep(i,,n)
wer(S.query(,,n,i,1ll)),wer2();
}
fwrite(sr,,C+,stdout);
return ;
}

2.[TJOI2018]智力竞赛

出题人语文水平真没话说

就是求dag最小可相交路径覆盖(网上还有人说有向图那这根本做不了)

比较显然的是如果我们确定了要取哪些点就变成了上述问题

按照网络流的一般套路应该是逐渐增大然后逐渐流量增大的

但是路径覆盖等于n-最大流 所以流量是在不断变小的

于是我们只能选择二分答案了

另外可相交路径覆盖

需要先求个传递闭包,然后再连边

如果不想交路径覆盖 就直接连边

连边方法就是将点拆成入点和出点 从一个的出点往另一个的入点连边

由于floyd没有用bitset写。。。 权值没有离散化。。。

常数挺大的。。反正这种题能过就行了。。。

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define ll long long
#define me(x) memset(x,0,sizeof(x))
#define mid ((h+t)>>1)
namespace IO
{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,C=-;
template<class T>void wer(T x)
{
if (x<) sr[++C]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++C]=z[Z],--Z);
}
IL void wer1()
{
sr[++C]=' ';
}
IL void wer2()
{
sr[++C]='\n';
}
template<class T>IL void maxa(T &x,T y) {if (x<y) x=y;}
template<class T>IL void mina(T &x,T y) {if (x>y) x=y;}
template<class T>IL T MAX(T x,T y){return x>y?x:y;}
template<class T>IL T MIN(T x,T y){return x<y?x:y;}
};
using namespace IO;
int n,mo;
const int N=2e5;
int s[N],t[N];
struct sgt{
ll lazy[N*];
void clear()
{
rep(i,,N*-) lazy[i]=;
}
void change(int x,int h,int t,int h1,int t1,int k)
{
if (h1<=h&&t<=t1)
{
(lazy[x]*=k)%=mo; return;
}
if (h1<=mid) change(x*,h,mid,h1,t1,k);
if (mid<t1) change(x*+,mid+,t,h1,t1,k);
}
ll query(int x,int h,int t,int pos,ll k)
{
(k*=lazy[x])%=mo;
if (h==t) return k;
if (pos<=mid) return query(x*,h,mid,pos,k);
else return query(x*+,mid+,t,pos,k);
}
}S;
int main()
{
int T;
read(T);
rep(tt,,T)
{
read(n); read(mo); me(s); me(t);
int kk,x;
rep(i,,n)
{
read(kk); read(x);
if (kk==)
{
s[i]=x; t[i]=n;
} else t[x]=i-;
}
S.clear();
rep(i,,n)
if (t[i])
S.change(,,n,i,t[i],s[i]);
rep(i,,n)
wer(S.query(,,n,i,1ll)),wer2();
}
fwrite(sr,,C+,stdout);
return ;
}

3.

好像老早写过了就不看了

4.[TJOI2018]异或

我觉得我有点傻逼。。。

首先这题显然是0/1trie去匹配

然后关键在于怎么实现子树和链操作

于是我很自然的想到了树链剖分+线段树(每个节点上一课trie)

于是成功达到了时间$nlog^3{n}$ 空间$nlog^2{n}$的傻逼境界

不过开O2还3s再加上树剖的常数小我觉得是跑的过得??

但是空间就gg了啊 我们得记录ls,rs  n*30*20*2这个没法艹过去

虽然trie的空间可能到不了n*30但感觉上还是过不去所以就不写了

另外如果空间只超过一点的话我记得有个技巧是把ls,rs压成一个unsigned int+一个unsigned short int

然后合成一个ll 再分成两个23位

所以还是看正解吧。。

因为是trie树 所以支持差分

那么建立可持久化0/1trie然后差分做就可以了

对于子树是按照dfn建立可持久,链是按照父亲建立

代码:

tjoi2018的更多相关文章

  1. bzoj 5338: [TJOI2018]xor (树链剖分+可持久化01Trie)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5338 题面: 5338: [TJOI2018]xor Time Limit: 30 Sec  ...

  2. [模板] dp套dp && bzoj5336: [TJOI2018]party

    Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...

  3. 洛谷P4590 [TJOI2018]游园会(状压dp LCS)

    题意 题目链接 Sol 这个题可能是TJOI2018唯一的非模板题了吧.. 考虑LCS的转移方程, \[f[i][j] = max(f[i - 1][j], f[i][j - 1], f[i - 1] ...

  4. 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)

    [BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...

  5. 【BZOJ5337】[TJOI2018]str(动态规划,哈希)

    [BZOJ5337][TJOI2018]str(动态规划,哈希) 题面 BZOJ 洛谷 题解 就很呆... 显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了... #in ...

  6. 【BZOJ5336】[TJOI2018]party(动态规划)

    [BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j ...

  7. 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)

    [BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...

  8. loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)

    目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就 ...

  9. 洛谷 P4593 [TJOI2018]教科书般的亵渎

    洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...

随机推荐

  1. LSH(Locality Sensitive Hashing)原理与实现

    原文地址:https://blog.csdn.net/guoziqing506/article/details/53019049 LSH(Locality Sensitive Hashing)翻译成中 ...

  2. 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)

    题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...

  3. codeforces 955F Cowmpany Cowmpensation 树上DP+多项式插值

    给一个树,每个点的权值为正整数,且不能超过自己的父节点,根节点的最高权值不超过D 问一共有多少种分配工资的方式? 题解: A immediate simple observation is that ...

  4. List元素去重的方法

    l为有重复元素的列表. 方法一: 可以简单的使用l = list(set(l)) 去重 方法二: fromkeys用法:dict.fromkeys(seq[, value])),value默认是Non ...

  5. 通过flask实现web页面简单的增删改查bootstrap美化版

    通过flask实现web页面简单的增删改查bootstrap美化版 项目目录结构 [root@node1 python]# tree -L 2 . ├── animate.css ├── fileut ...

  6. Freemaker:操作集合

    <#if (id?index_of('Base') >= 0)> <choose> <when test="rootOrgID !=null and ro ...

  7. 响应式页面-@media介绍

    01 响应式页面-@media介绍,   我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话 ...

  8. windows IDEA注册码激活方法(2018.4.8)靠谱可用!

    简介 intellij idea 2018注册码是针对intellij idea 2018软件研发推出,它的使用需要和激活补丁一起使用,安装包里面也拥有破解补丁, 所有无需在进行单独的下载:不过如果选 ...

  9. ifconfig和ping

    命令: ifconfig 对应英文: configure a network interface 作用: 查看 / 配置计算机当前的网卡配置信息 安装: sudo apt install net-to ...

  10. TabHost实现底部导航栏

    源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/tabnavigation.zip          现在很多Android应用界面都采用底部导航 ...