Ground Defense

题目描述

You are a denizen of Linetopia, whose n major cities happen to be equally spaced along an east-west line. In fact, they are often numbered in order from 1 to n, where 1 is the westmost city and n is the eastmost city.

Linetopia was a lovely place to live until forces from neighboring Trapez invaded. As part of Linetopia’s Shielding Lives and Protecting Citizens initiative, you have been called upon to process information about Trapezoid troop movements so we can determine which cities have been hardest hit and know where to send reinforcements.

Linetopia intelligence has discovered that the Trapezoid forces are attacking in the following pattern. They are sending massive aircraft to drop troops on Linetopia cities. Each aircraft starts at some city i, dropping s soldiers. The aircraft then proceeds to fly either east or west. Each time it flies over another city, it drops a more soldiers than it dropped on the previous city it passed. After performing d drops, the aircraft returns to Trapez to resupply.

You will be receiving intel updates that inform you of the specs of each Trapezoid aircraft passing over Linetopia. You want to answer queries that ask how many Trapezoid troops have been dropped on a particular city. Are you up to the task?

输入

The first line of input contains a single integer T (1 ≤ T ≤ 10), the number of test cases. The first line of each test case contains two integers: m (1 ≤ m ≤ 10,000), the number of updates and queries and n (1 ≤ n ≤ 500,000), the number of cities in Linetopia.

The next m lines of input are either updates or queries. Update lines begin with a capital U, then contain either a capital E (east) or W (west) to indicate direction, and then contain four integers i (1 ≤ i ≤ n), s (1 ≤ s ≤ 10,000), a (0 ≤ a ≤ 10,000), and d (1 ≤ d ≤ n). These integers signify the starting city, the starting number of soldiers, the increase in soldiers per city, and the number of drops, respectively. You can assume d never results in an aircraft flying to the west of city 1 or to the east of city n.

Query lines begin with a capital Q, and then contain a single integer i (1 ≤ i ≤ n) indicating the city being queried.

输出

For each query in the input, output a single line containing the number of Trapezoid troops dropped in that city.

样例输入

1
8 3
U E 1 5 2 3
Q 1
Q 2
Q 3
U W 3 10 10 2
Q 1
Q 2
Q 3

样例输出

5
7
9
5
27
19

提示

Two aircrafts fly over Linetopia. The first starts at city 1 and heads east. It drops 5 soldiers on city 1, 7

soldiers on city 2, and 9 soldiers on city 3. The second starts at city 3 and flies west. It drops 10 soldiers on

city 3 and 20 soldiers on city 2.

题解

每次更新的时候就用结构体存下来,

然后查的时候再遍历结构体计算

比赛的时候看这题这么少人过,觉得是我们想的太简单了、没怎么敢写,而且一直在怼另外那个E题

然而真的就是这样做= 。=

注意long long ,计算的过程中也要强制转换long long,这里WA了两发

代码

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define rep(i,a,n) for(int i=a;i<n;++i)
#define readc(x) scanf("%c",&x)
#define read(x) scanf("%d",&x)
#define sca(x) scanf("%d",&x)
#define read2(x,y) scanf("%d%d",&x,&y)
#define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define print(x) printf("%d\n",x)
#define mst(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&-x
#define lson(x) x<<1
#define rson(x) x<<1|1
#define pb push_back
#define mp make_pair
typedef pair<int,int> P;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int inf =0x3f3f3f3f;
const int mod = 1e9+7;
const int MAXN = 105;
const int maxn = 10010;
struct node
{
int st;
int len;
int orient;
int a0;
int d;
}p[500005]; char s[5];
ll a,b,c,d;
int cnt ;
int main()
{
int t;
sca(t);
while(t--)
{
cnt = 0;
int m,n;
read2(m,n);
while(m--)
{
scanf("%s", s);
if(s[0] == 'U'){
scanf("%s",s);
p[cnt].orient = s[0] == 'E' ;
scanf("%d%d%d%d",&a,&b,&c,&d);
p[cnt].st = a;
p[cnt].a0 = b;
p[cnt].d = c;
p[cnt++].len = d;
}
else {
int x;
read(x);
ll ans = 0;
for(int i = 0; i < cnt ;i++){
if(p[i].orient && x >= p[i].st && x <= p[i].st + p[i].len - 1) {
ans += p[i].a0 + (ll)(x - p[i].st) * p[i].d;
}
else if(!p[i].orient && x <= p[i].st && x >= p[i].st - p[i].len + 1) {
ans += p[i].a0 + (ll)(p[i].st - x) * p[i].d;
}
}
printf("%lld\n",ans);
}
}
}
return 0;
}

最新文章

  1. 手机浏览器不支持 IDBObjectStore.getAll
  2. Tomcat 随机挂掉
  3. CentOS下设置MySQL的root密码
  4. 【java】关于时间
  5. javascript 的button onclick事件不起作用的解决方法
  6. iOS - Swift NSSize 尺寸
  7. 未能正确加载“radlangsvc.package,radlangsvc.vs,version=10.0.0,culture=neutra
  8. MVC中Jqgrid的用法
  9. PCL—低层次视觉—点云分割(基于凹凸性)
  10. bzoj1263
  11. oracle 与sql server 部分内置函数替换
  12. 供求WAP-VUE 笔记
  13. 【锋利的Jquery】读书笔记五
  14. java fx example
  15. ts中interface与class的区别
  16. C++———库函数cstring及string方法解读
  17. DBlink 创建 删除 脚本
  18. centos7通过yum安装JDK1.8
  19. React数据流和组件间的通信总结
  20. vmware 10.0 安装centos6.5 客户系统 几个问题

热门文章

  1. swoole 安装与简单应用
  2. hbase之RPC详解
  3. 工控PLC中,关于定时器TON,TOF,的一点新认知,或者说醒悟吧!
  4. golang的数据类型之字符串类型
  5. python小学堂-基础调用
  6. Neo4j百万级数据导入只需30s
  7. 配置静态IP时候route没有设置的GATEWAY问题
  8. js 基础 for in 和 for of的区别详解
  9. LAN VLAN与VXLAN学习笔记
  10. 自定义 MessageBox 组件