Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task : _example
- Author : Phumipat C. [MAGCARI]
- Language : C++
- */
- #include<bits/stdc++.h>
- using namespace std;
- struct A{
- int idx,val,type;
- // type 0 = +, type 1 = -, type 2 = *2,type 3 = /2
- bool operator < (const A&o) const{
- if(idx!=o.idx) return idx < o.idx;
- else return type > o.type;
- }
- };
- void solve(){
- int n,m;
- cin >> n >> m;
- vector<A > e;
- for(int i=1;i<=n;i++){
- int t,x,y,z;
- cin >> t >> x >> y >> z;
- if(t == 0){
- if(x+y>m){
- e.push_back({x,z,0});
- e.push_back({m,z,1});
- e.push_back({0,z,0});
- e.push_back({(x+y)%m,z,1});
- }else{
- e.push_back({x,z,0});
- e.push_back({x+y,z,1});
- }
- }else{
- if(x+y>m){
- e.push_back({x,z,2});
- e.push_back({m,z,3});
- e.push_back({0,z,2});
- e.push_back({(x+y)%m,z,3});
- }else{
- e.push_back({x,z,2});
- e.push_back({x+y,z,3});
- }
- }
- }
- e.push_back({0,0,0});
- sort(e.begin(),e.end());
- e.push_back({m,0,0});
- long long now = 0,cnt = 0,ansNum = 0,ansVal = -1e18;
- for(int i=0;i<e.size()-1;i++){
- if(e[i].type == 0){
- now += e[i].val * (1ll << cnt);
- }else if(e[i].type == 1){
- now -= e[i].val * (1ll << cnt);
- }else if(e[i].type == 2){
- now *= 2;
- cnt++;
- }else{
- now /= 2;
- cnt--;
- }
- if(now > ansVal && e[i+1].idx != e[i].idx){
- ansVal = now;
- ansNum = e[i+1].idx - e[i].idx;
- }else if(now == ansVal && e[i+1].idx != e[i].idx){
- ansNum += e[i+1].idx - e[i].idx;
- }
- }
- cout << ansNum << ' ' << ansVal << '\n';
- }
- int main(){
- int q;
- cin >> q;
- while(q--){
- solve();
- }
- return 0;
- }
Advertisement
Advertisement