tjoi2018
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 ;
}
出题人语文水平真没话说
就是求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的更多相关文章
- bzoj 5338: [TJOI2018]xor (树链剖分+可持久化01Trie)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5338 题面: 5338: [TJOI2018]xor Time Limit: 30 Sec ...
- [模板] dp套dp && bzoj5336: [TJOI2018]party
Description Problem 5336. -- [TJOI2018]party Solution 神奇的dp套dp... 考虑lcs的转移方程: \[ lcs[i][j]=\begin{ca ...
- 洛谷P4590 [TJOI2018]游园会(状压dp LCS)
题意 题目链接 Sol 这个题可能是TJOI2018唯一的非模板题了吧.. 考虑LCS的转移方程, \[f[i][j] = max(f[i - 1][j], f[i][j - 1], f[i - 1] ...
- 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
[BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...
- 【BZOJ5337】[TJOI2018]str(动态规划,哈希)
[BZOJ5337][TJOI2018]str(动态规划,哈希) 题面 BZOJ 洛谷 题解 就很呆... 显然按层\(dp\),如果能够匹配上就进行转移,直接哈希判断是否能够匹配就好了... #in ...
- 【BZOJ5336】[TJOI2018]party(动态规划)
[BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j ...
- 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)
[BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...
- loj#2574. 「TJOI2018」智力竞赛 (路径覆盖)
目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就 ...
- 洛谷 P4593 [TJOI2018]教科书般的亵渎
洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\ ...
随机推荐
- ffmpeg h264 encdoer 速度对比
h264_qsv frame= 250 fps=0.0 q=-0.0 Lsize= 1401kB time=00:00:10.00 bitrate=1146.8kbits/s speed= 14x l ...
- bootstrap简单使用布局、栅格系统、modal标签页等常用组件入门
<!DOCTYPE html> <html> <head> <title>bootstrap</title> <!-- 引入boots ...
- 修改JDK版本配置
我使用的maven是3.0.5版本的,在创建项目的时候,默认使用的jdk为1.5版本 在项目的pom.xml中添加如下配置可修改使用的jdk版本. <properties> <!-- ...
- Linux下怎样搜索文件
使用linux系统难免会忘记文件所在的位置,可以使用以下命令对系统中的文件进行搜索.搜索文件的命令为”find“:”locate“:”whereis“:”which“:”type“ 方法/步骤 ...
- POJ 1006 同余方程组
以前的做法 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring& ...
- Servlet随笔
HttpServlet中的getRequestURL.getRequestURI.getContextPath方法获取的字符串为 jsp文件会被编译成一个Servlet,该Servlet继承自Http ...
- spring中BeanFactory和FactoryBean的区别
共同点: 都是接口 区别: BeanFactory 以Factory结尾,表示它是一个工厂类,用于管理Bean的一个工厂 在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器 ...
- eclipse 安装教程
eclipse 安装教程 一:安装包下载: 链接: https://pan.baidu.com/s/1qZtt62o 密码: 4ak2 注:若 下载链接失效,请看本文公告的QQ群,请联系群主. 二:安 ...
- Confluence 6 使用 JConsole 监控远程 Confluence
针对生产系统中,我们推荐你使用远程监控,这个将不会消耗你远程 Confluence 服务器的资源. 启动远程监控: 添加下面的属性到 setenv.sh / setenv.bat 文件中,端口你可以定 ...
- mysql 安装问题一:由于找不到MSVCR120.dll,无法继续执行代码.重新安装程序可能会解决此问题。
这种错误是由于未安装 vcredist 引起的 下载 vcredist 地址:https://www.microsoft.com/zh-CN/download/details.aspx?id= ...