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,每次有任务的时候,总会有一批编号连在一起人请战 ...
随机推荐
- 问题:git处理中文名称时候显示为编码形式(已解决)
问题描述: Untracked files: (use "git add <file>..." to include in what will be committed ...
- 锁、CAS操作和无锁队列的实现
https://blog.csdn.net/yishizuofei/article/details/78353722 锁的机制 锁和人很像,有的人乐观,总会想到好的一方面,所以只要越努力,就会越幸运: ...
- 一些不常见的css知识
margin-top:20% ----------------20% 是宽度的20%
- 原生JS实现图片拖拽移动与缩放
看一下最终效果,图片可以拖动,可以缩放 把代码贴出来,可以直接粘贴使用,大致的思想就是鼠标按下的时候获取当时的鼠标位置,要减去left和top值,移动的时候获取位置减去初始的值就得到移动的时候的lef ...
- Python 3.6 TypeEror: iter() returned non-iterator of type
环境:Python 3.6 class Fabs(object): def __init__(self,max): self.max = max self.n, self.a, self.b = 0, ...
- my.兽决_等_价格
1.20170411 音乐洒水车,升50级 送了 兽决 隐身,摆摊推荐价格 20000金,大家都卖26000金 2.20170417 音乐洒水车 挖到 必杀 魔决,推荐价格 19820金,我以 -10 ...
- public class 与 class 的区别
public class 与 class 的区别 1.一个类前面的public是可有可无的 2.如果一个类使用 public 修饰,则文件名必须与类名一致 3.如果一个类前面没有使用public修饰, ...
- HTML6即将到来,你没有看错是HTML6
HTML6提案1:对视频对象的更多控制 我们可能永远不会解决与压缩编解码器的争斗,但我们可以与之配合.不同的压缩算法可能需要更多的工作来实现,但是它们提供竞争.能对展现在页面上的视频帧提供更多控制的方 ...
- fireFox在中国的https网站的时候,老会出 ssl_error_unsupported_version 这个错误。
fireFox在中国的https网站的时候,老会出 ssl_error_unsupported_version 这个错误. 出现在 这个的解决办法就是 在地址栏里输入 about:config 查找 ...
- LeetCode 441.排列硬币(C++)
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围内. 示例 ...