NYOJ 士兵杀敌(1~5)
士兵杀敌(1): http://acm.nyist.net/JudgeOnline/problem.php?pid=108
分析:前缀和
#include <bits/stdc++.h> using namespace std; int a[];
int sum[]; int main()
{
int n,m;
scanf("%d%d",&n,&m); sum[] = ;
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
sum[i] = sum[i-] + a[i];
} while(m--) {
int m,n;
scanf("%d%d",&m,&n);
if(m>n)
swap(m,n);
printf("%d\n",sum[n]-sum[m-]); } return ;
}
士兵杀敌(2):http://acm.nyist.net/JudgeOnline/problem.php?pid=116
分析:树状数组(单点更新,区间求和)
#include <bits/stdc++.h> using namespace std; const int maxn = +; int C[maxn];
int n,m; int lowbit(int x) {
return x&-x;
} //A[1] + A[2] + ... + A[x]
int sum(int x) {
int ret = ;
while(x>) {
ret +=C[x];
x-=lowbit(x);
}
return ret;
} //A[x] +=d;
void add(int x,int d) {
while(x<=n) {
C[x] +=d;
x+=lowbit(x);
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
int x;
scanf("%d",&x);
add(i,x);
} char cmd[];
for(int i=;i<m;i++) {
scanf("%s",cmd);
if(cmd[]=='A')
{
int x,d;
scanf("%d%d",&x,&d);
add(x,d);
}
else {
int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",sum(v)-sum(u-));
}
} return ;
}
士兵杀敌(3):http://acm.nyist.net/JudgeOnline/problem.php?pid=119
分析:RMQ
#include <bits/stdc++.h> using namespace std; const int maxn = ; struct RMQ { int dmin[maxn][];
int dmax[maxn][]; void RMQ_init(const vector<int>& A) {
int n = A.size();
for(int i=;i<n;i++)
{
dmin[i][] = A[i];
dmax[i][] = A[i];
} for(int j=;(<<j)<=n;j++) {
for(int i=;i+(<<j)-<n;i++) {
dmin[i][j] = min(dmin[i][j-],dmin[i+(<<(j-))][j-]);
dmax[i][j] = max(dmax[i][j-],dmax[i+(<<(j-))][j-]);
}
}
} int RMQ_min(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
return min(dmin[L][k],dmin[R-(<<k)+][k]);
} int RMQ_max(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
int ans = max(dmax[L][k],dmax[R-(<<k)+][k]);
return ans;
} }sol; int main()
{
int n,m;
scanf("%d%d",&n,&m);
vector<int> v;
for(int i=;i<n;i++) {
int x;
scanf("%d",&x);
v.push_back(x);
}
sol.RMQ_init(v); for(int i=;i<m;i++) {
int l,r;
scanf("%d%d",&l,&r);
l--;r--;
printf("%d\n",sol.RMQ_max(l,r)-sol.RMQ_min(l,r));
} return ;
}
士兵杀敌(4):http://acm.nyist.net/JudgeOnline/problem.php?pid=123
分析:区间更新,单点查询;
线段树超时,要优化线段树,线段树这么高级,我可不会改板子啊 (*^__^*)
解法:利用树状数组的逆过程!!!
add的时候,就把路上的C[x] 全都加上;(add(qR,v);add(qL-1,v))
询问的时候,往右上走,看看总共有多少给这个点产生了影响;
#include <bits/stdc++.h> using namespace std; const int maxn = +;
int C[maxn];
int m,t;
int lowbit(int x)
{
return x&-x;
} void add(int star,int num) {
while(star>) {
C[star]+=num;
star-=lowbit(star);
}
} int sum(int star) {
int sum = ;
while(star<=m) {
sum+=C[star];
star+=lowbit(star);
}
return sum;
} int main()
{
scanf("%d%d",&t,&m);
while(t--) {
char cmd[];
scanf("%s",cmd);
if(cmd[]=='A') {
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
add(v,c);
add(u-,-c);
}
else {
int pos;
scanf("%d",&pos);
printf("%d\n",sum(pos));
}
} return ;
}
士兵杀敌(5):http://acm.nyist.net/JudgeOnline/problem.php?pid=228
分析:区间更新,线段查询;
线段树又超时了 (ノへ ̄、)
解法:巧用数组,记录下来每个区间的更新的起点,和结束的起点,然后累加计算出正确数组;
再求一个前缀和;
/*
#include <bits/stdc++.h> using namespace std; const int maxnode = 1000001<<2;
int _min,_max,_sum;
int qL,qR,v; struct IntervalTree
{
int sumv[maxnode], minv[maxnode], maxv[maxnode], addv[maxnode];
void maintain(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
sumv[o] = minv[o] = maxv[o] = 0;
if(R > L)
{
sumv[o] = sumv[lc] + sumv[rc];
minv[o] = min(minv[lc], minv[rc]);
maxv[o] = max(maxv[lc], maxv[rc]);
}
if(addv[o])
{
minv[o] += addv[o];
maxv[o] += addv[o];
sumv[o] += addv[o] * (R-L+1);
}
} void update(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
if(qL <= L && qR >= R)
{
addv[o] += v;
}
else
{
int M = L + (R-L)/2;
if(qL <= M) update(lc, L, M);
if(qR > M) update(rc, M+1, R);
}
maintain(o, L, R);
} void query(int o, int L, int R, int add)
{
if(qL <= L && qR >= R)
{
_sum += (sumv[o] + add * (R-L+1))%10003;
_min = min(_min, minv[o] + add);
_max = max(_max, maxv[o] + add);
}
else
{
int M = L + (R-L)/2;
if(qL <= M) query(o*2, L, M, add + addv[o]);
if(qR > M) query(o*2+1, M+1, R, add + addv[o]);
}
} }tree; int main()
{
int n,c,q;
scanf("%d%d%d",&n,&c,&q);
while(c--) {
scanf("%d%d%d",&qL,&qR,&v);
tree.update(1,1,n);
} while(q--) {
_sum = 0;
scanf("%d%d",&qL,&qR);
tree.query(1,1,n,0);
printf("%d\n",_sum);
} return 0;
}
*/ #include <bits/stdc++.h> using namespace std; const int maxn = ;
int num[maxn]; int main()
{
int n,c,q;
memset(num,,sizeof(num));
scanf("%d%d%d",&n,&c,&q);
for(int i=;i<c;i++) {
int l,r,v;
scanf("%d%d%d",&l,&r,&v);
num[l]+=v;
num[r+]-=v;
} for(int i=;i<=n;i++) {
num[i]+=num[i-];
} for(int i=;i<=n;i++) {
num[i]=(num[i]+num[i-])%;
}
while(q--) {
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",(num[r]-num[l-]+)%);
} return ;
}
NYOJ 士兵杀敌(1~5)的更多相关文章
- NYOJ 士兵杀敌(三)
描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌 ...
- NYOJ 119 士兵杀敌(三) RMQ ST
NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...
- NYOJ 116 士兵杀敌 (线段树,区间和)
题目链接:NYOJ 116 士兵杀敌 士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描写叙述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的 ...
- nyoj 108 士兵杀敌(一)
点击打开链接 士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师, ...
- NYOJ 123 士兵杀敌4-树状数组的插线求点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- nyoj 119 士兵杀敌(三)(RMQ)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...
- nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...
- nyoj 116 士兵杀敌(二)【线段树单点更新+求和】
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
- nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...
随机推荐
- windows开机启动软件设置
开机启动软件设置 操作步骤如下: 1.按win+r,输入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,点击确定: 2.拖动 ...
- OpenCV教程(转自:浅墨_毛星云博客)
2.图像的载入,显示和输出 一站式完全解析 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/detail ...
- 如何 将下载离线 nupkg 文件 安装到VS2017
https://www.cnblogs.com/cncc/articles/8276878.html --------------------------------------------- ...
- my.资料__烹饪炼药
ZC: 新区的时候,烹饪炼药 也不是 等级越高越好:等级越高需要的人可能少,价格高 但是买的人少:大家都在那个等级 很容易堵车 没有摊位... 刚开始 大家都穷 可能等级稍低的 反而好卖... ZC: ...
- 转 Alert.log shows No Standby Redo Logfiles Of Size 153600 Blocks Available
http://blog.itpub.net/23135684/viewspace-703620/ Alert.log shows No Standby Redo Logfiles Of Size 15 ...
- mysql查看sql语句的设置
SHOW VARIABLES LIKE "general_log%"; SET GLOBAL general_log_file = 'D:\\mysql.log'; SET GLO ...
- swagger2使用日志
------------------------------------------------------------------------------------ 安装.配置.使用 参考:htt ...
- 倒计时Text显示控制
倒计时Text显示控制:public class TimeCtrl : MonoBehaviour { public Text SJ; //定义显示Text public int GameTimes= ...
- 百度 CDN公共库
http://developer.baidu.com/wiki/index.php?title=docs/cplat/libs 简介 CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直 ...
- verilog if语句
a.基本形式 1) if(表达式) 语句1: 2)if(表达式) 语句1: else 语句1 3) if(表达式1) 语句1: else if(表达式2) 语句2: else if(表达式3) ...