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. IOT相关协议

    MQTT协议的入门 入门教程; 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递; 这意味着发布者和订阅者之间并不需要直接建立联系; 消息类型 MQTT拥有14种不同的消息类型: CONNE ...

  2. $Django Paginator分页器 批量创建数据

    1批量插入数据: User_list=[]for i in range(100): User_list.append(User(name='小明%s'%i,pwd='abcdefg%s'%i))# 两 ...

  3. nginx配置文件注释说明

    #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...

  4. ebs 12.1.1 单节点多用户安装

    本次测试环境:操作系统 oracle linux 6.9   oracle ebs 12.1.1   192.168.20.210  erpapp1.hthorizon.com erpapp1 yum ...

  5. ASP.NET MVC5高级编程 之 数据注解和验证

    客户端验证逻辑会对用户向表单输入的数据给出一个即时反馈.而之所以需要服务器端验证,是因为来自网络的信息都是不能被信任的. 当在ASP.NET MVC设计模式上下文中谈论验证时,主要关注的是验证模型的值 ...

  6. Javascript杂!

    JavaScript 标准参考教程(alpha) javascript中的 Object.defineProperty()和defineProperties JS压缩混淆  ---- 雅虎YUI 在线 ...

  7. 前端图片缓存之通过img标签加载GIF只能播放一次问题(转载)

    最近项目中要求再网页中插入一张gif图片,让用户每次到达该位置时动一次,所以我们就制作了一张只动一次的gif图片通过img标签引入.当用户进入该位置时,通过remove()清除图片然后重新append ...

  8. NIO(五)

    分散读取,聚集写入 package com.cppdy.nio; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import ...

  9. NIO(三)

    使用直接缓冲区完成文件的复制(内存映射文件) package com.cppdy.nio; import java.nio.MappedByteBuffer; import java.nio.chan ...

  10. java多线程快速入门(二十二)

    线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接 ...