Codeforces 339D Xenia and Bit Operations vj地址
题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的长度是上一个序列长度-1,当新序列长度为1时停止运算,奇数次操作进行OR运算,偶数次操作进行XOR运算,
现在有m个询问,每次询问会改变上一个序列中的一个值,问新序列运算后的值为多少

思路:他合并的路线,刚好是和线段树的合并线路是一样的,所有 可以巧妙利用线段树来 算出 答案,就是sum【1】;
代码

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define INF 0x3f3f3f3f3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
#define fi first
#define rep(i,n) for(int i=0;(i)<(n);i++)
#define rep1(i,n) for(int i=1;(i)<=(n);i++)
#define se secondusing namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
typedef pair<int,int > pii;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=1e9+7;
const ll N =1<<18;
const double eps = 1e-4;
const double pi=acos(-1);
ll gcd(int a,int b){return !b?a:gcd(b,a%b);}
int num[N];
int ans[N];
void build(int l,int r,int rt,int op)
{if(l==r){ans[rt]=num[l];return;}int mid=(l+r)>>1;build(l,mid,rt<<1,1-op);build(mid+1,r,rt<<1|1,1-op);if(op==1) ans[rt]=ans[rt<<1]|ans[rt<<1|1];else ans[rt]=ans[rt<<1]^ans[rt<<1|1];
}
void update(int l,int r,int rt,int index,int value,int op)
{if(l==r&&l==index){ans[rt]=value;return;}int mid=(l+r)>>1;if(mid<index){update(mid+1,r,(rt<<1|1),index,value,1-op);}else{update(l,mid,rt<<1,index,value,1-op);}if(op==1) ans[rt]=ans[rt<<1]|ans[rt<<1|1];else ans[rt]=ans[rt<<1]^ans[rt<<1|1];
}
int main()
{//cout<<maxx+1<<endl;int n,m;scanf("%d%d",&n,&m);int sum=1<<n;for(int i=1;i<=sum;i++)scanf("%d",&num[i]);build(1,sum,1,n%2);for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);update(1,sum,1,a,b,n%2);printf("%d\n",ans[1]);}return 0;
}

Billboard HDU - 2795 vj地址

题目 大意: 有一块长为h,宽为w的广告牌,可以在上面放广告,广告的面积是宽为 a[i],长默认为1,有n个广告,按顺序放,如果上面有位置,优先放在最上面,没有位置放了 输出-1。

思路:用于是从上到下的放,可以利用线段树,二分的从左到右的搜索,左边能够满足 ,优先左边。利用线段树来维护 宽度。

代码

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define INF 0x3f3f3f3f3f3f3f3f
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define re register
#define lowbit(a) ((a)&-(a))
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
using namespace std;
typedef long long  ll;
typedef unsigned long long  ull;
int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1};
const ll mod=10001;
const ll N =1e6+10;
struct p
{int l,r;int Max;
}s[N];
int n,h,w;
void build(int l,int r,int u)
{s[u].l=l;s[u].r=r;s[u].Max=w;if(l==r) return;int mid=(l+r)>>1;build(l,mid,u<<1);build(mid+1,r,u<<1|1);
}
void q(int l,int r,int u,int w1)
{if(l==r){s[u].Max-=w1;printf("%d\n",l);return;}int mid=(l+r)>>1;if(s[u<<1].Max>=w1){q(l,mid,u<<1,w1);}else{q(mid+1,r,u<<1|1,w1);}s[u].Max=max(s[u<<1].Max,s[u<<1|1].Max);
}
int main()
{while(~scanf("%d%d%d",&h,&w,&n)){if(h>n) h=n;build(1,h,1);for(int i=0;i<n;i++){int w1;scanf("%d",&w1);if(w1>s[1].Max) printf("-1\n");else{q(1,h,1,w1);}}}return 0;
}

线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)相关推荐

  1. Codeforces 1108 E2(线段树+思维)

    传送们 题意: 给你一个长度为nnn的数列bbb.以及mmm个区间. 你可以选取111个或多个这样的区间aia_iai​,使得令区间aia_iai​所对应的所有值bib_ibi​都减111.你最终要使 ...

  2. CodeForces - 1405E Fixed Point Removal(线段树+思维)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,规定当 a[ i ] == i 时,位置 i 可以被删除掉,后面位置会合并上来,现在需要回答 m 次询问,每次询问会问禁用掉后面 x 个 ...

  3. CodeForces - 1326E Bombs(线段树+思维)

    题目链接:点击查看 题目大意:给出一个 n 的排列记为 p[ i ] ,现在有一个初始时为空的集合A,对于每个 i 遍历 1 ~ n ,每次的操作如下: 向集合中添加 p[ i ] 如果位置 i 有炸 ...

  4. Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...

    题目链接: https://codeforces.com/contest/1093/problem/G 题目: 题意: 在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一 ...

  5. 小翔和泰拉瑞亚(线段树+思维)

    链接:https://ac.nowcoder.com/acm/contest/3566/D 来源:牛客网 小翔和泰拉瑞亚 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K ...

  6. 牛客 - 骚区间(线段树+思维)

    题目链接:点击查看 题目大意:给出一个 1 ~ n 的排列 a ,现在规定骚区间当且仅当 a[ l ] 是 [ l , r ] 这段区间内的次小值,同时 a[ r ] 是 [ l , r ] 这段区间 ...

  7. HDU - 6602 Longest Subarray(线段树+思维)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,每个数字的范围是 [ 1 , C ] ,现在需要求一个子串,使得字串中的字母,要么出现 0 次,要么出现至少 K 次,问这个子串的最大长度是多 ...

  8. HDU - 6315 Naive Operations(线段树+思维)

    题目链接:点击查看 题目大意:给出一个数列 a 和一个数列 b ,其中数列 a 初始时全部为 0 ,数列 b 初始时是一个 1 ~ n 的排列,接下来共有 m 次操作,每次操作分为两种: add l ...

  9. POJ - 2828 Buy Tickets(线段树+思维/Splay+模拟)

    题目链接:点击查看 题目大意:给出n个人,一个队列,一开始队列是空的,每个人加入的时候都会插入到指定位置pos的后面,即插队,问最后队列的排列情况是怎么样的 题目分析:一开始很难想到是线段树的题目,毕 ...

最新文章

  1. OpenArkCompiler方舟编译
  2. UNIX中的文件和目录
  3. TFS2012 服务器安装
  4. 3.通过现有的PDB创建一个新的PDB
  5. FastReport人民币大写转换
  6. .典型用户 - 场景
  7. CentOS7没有telnet命令的解决方法
  8. [Ubuntu] 使用 ibus 输入汉字
  9. Node.js 切近实战(七) 之Excel在线(文件文件组)
  10. php 向文件夹中添加HTML文件,批量向html中插入内容
  11. 在unity中生成螺旋线的效果
  12. html文件vbs病毒,又一个VBS病毒源码的解密
  13. 串联电阻分压计算器---实际常用电阻表
  14. 中级计算机网络管理员试卷,计算机网络管理员中级考试题及答案
  15. python-函数-圆形生成器
  16. 我的微信公众号开通了!
  17. through mysql.sock_MySQL server through socket '/tmp/mysql.sock' (2)
  18. JS 实现驼峰式转下横线,下横线转驼峰式2
  19. cmake 生成供find_package使用的自定义模块
  20. Runc容器运行过程及容器逃逸原理

热门文章

  1. 日本的电视节目到底能有多特别?
  2. 如果你没有时间读书,至少要保留这个习惯
  3. BBC又一神作,豆瓣9.8分,美轮美奂的大自然不仅仅属于人类
  4. 最全高考分数线出炉!!查了分后,这届学生为了过线真是太拼了.......
  5. 分享一个理工男必学的撩妹姿势
  6. 课程笔记|吴恩达Coursera机器学习 Week1 笔记-机器学习基础
  7. 不懂这25个名词,好意思说你懂大数据?
  8. 兔子野鸡49只100条腿c语言,家禽生产学复习题
  9. SimpleXMLRPC_python xmlrpclib SimpleXMLRPCServer 模块
  10. php转译html,使用php转义输出HTML到JavaScript