Submission #964585

# Submission time Handle Problem Language Result Execution time Memory
964585 2024-04-17T07:02:51 Z noobcodur Meteors (POI11_met) C++14
100 / 100
2060 ms 63292 KB
#include<bits/stdc++.h>
using namespace std;

using ld = long double;

#define int long long
#define pii pair<int,int>
#define forn(i,j) for(int i = 0; i < j; ++i)
#define forrange(i,j,k) for(int i = j; i < k; ++i)
#define vi vector<int>
#define vpii vector<pii>
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()

const int MOD = 1e9+7; const int INF = 1e9; const int maxN = 3e5+2;

void setIO(string name){
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	if(!name.empty()){
		freopen((name + ".in").c_str(),"r",stdin);
		freopen((name + ".out").c_str(),"w",stdout);
	}
}

int bit[maxN];

void update(int idx, int val){
	while(idx < maxN){
		bit[idx] += val;
		idx += idx&-idx;
	}
}

int query(int idx){
	int res = 0;

	while(idx > 0){
		res += bit[idx];
		idx -= idx&-idx;
	}

	return res;
}

struct Query{
	int t,left,right,val;
};

struct Station{
	int lo,mid,hi,idx;
};

bool comp(Station A, Station B){
	return A.mid < B.mid;
}

int res[maxN];

signed main(){
	setIO("");
	int n,m; cin >> n >> m;
	vector<vi> loc(n+1);
	vi p(n+1);

	forrange(i,1,m+1){
		int a; cin >> a;
		loc[a].pb(i);
	}

	forrange(i,1,n+1){
		cin >> p[i];
	}

	int q; cin >> q;

	vector<Query> Q;

	forn(i,q){
		Query T;

		cin >> T.left >> T.right >> T.val;
		T.t = 0;

		if(T.left > T.right){
			T.t = 1;
			swap(T.left,T.right);
		} 

		Q.pb(T);
	}

	vector<Station> S;

	forrange(i,1,n+1){
		Station T;
		T.lo = 0, T.hi = q;
		T.mid = (T.lo + T.hi)/2;
		T.idx = i;

		S.pb(T);
	}

	while(!S.empty()){
		int ptr = -1;
		vector<Station> curr;

		for(Station T : S){
			if(T.lo >= T.hi){
				res[T.idx] = T.lo;
				continue;
			}

			while(ptr < q-1 && ptr < T.mid){
				ptr++;

				if(!Q[ptr].t){
					update(Q[ptr].left,Q[ptr].val);
					update(Q[ptr].right+1,-Q[ptr].val);
				}

				else{
					update(1,Q[ptr].val);
					update(Q[ptr].left+1,-Q[ptr].val);
					update(Q[ptr].right,Q[ptr].val);
				}
			}

			int ans = 0;

			for(int j : loc[T.idx]){
				ans += query(j);
				if(ans > INF) break;
			}

			if(ans >= p[T.idx]){
				T.hi = T.mid;
				T.mid = (T.lo + T.hi)/2;

				curr.pb(T);
			}

			else{
				T.lo = T.mid+1;
				T.mid = (T.lo + T.hi)/2;
				curr.pb(T);
			}
		}

		S.clear();
		sort(all(curr),comp);
		fill(bit,bit+m+1,0);

		for(Station T : curr) S.pb(T);
	}


	forrange(i,1,n+1){
		if(res[i] == q){
			cout << "NIE" << endl; 
		}

		else cout << res[i]+1 << endl;
	}
}

Compilation message

met.cpp: In function 'void setIO(std::string)':
met.cpp:24:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   24 |   freopen((name + ".in").c_str(),"r",stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
met.cpp:25:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   freopen((name + ".out").c_str(),"w",stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 3 ms 2656 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2652 KB Output is correct
3 Correct 4 ms 2648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 59 ms 6332 KB Output is correct
2 Correct 157 ms 11872 KB Output is correct
3 Correct 100 ms 7776 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 108 ms 7112 KB Output is correct
2 Correct 114 ms 7328 KB Output is correct
3 Correct 175 ms 11712 KB Output is correct
4 Correct 58 ms 5812 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 106 ms 6288 KB Output is correct
2 Correct 224 ms 11728 KB Output is correct
3 Correct 41 ms 4816 KB Output is correct
4 Correct 115 ms 8852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 37 ms 5712 KB Output is correct
2 Correct 123 ms 7440 KB Output is correct
3 Correct 66 ms 5972 KB Output is correct
4 Correct 155 ms 11804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1148 ms 43404 KB Output is correct
2 Correct 128 ms 28380 KB Output is correct
3 Correct 302 ms 12844 KB Output is correct
4 Correct 1820 ms 62580 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1063 ms 40820 KB Output is correct
2 Correct 475 ms 26380 KB Output is correct
3 Correct 66 ms 12988 KB Output is correct
4 Correct 2060 ms 63292 KB Output is correct